我希望能够直接或从回调中从WCF调用返回IObservable。这样做的原因是,我可以接收一个我将订阅的枚举,并能够一次处理一个结果。
我可以很容易地使用回调来一次一个地获得结果的推送通知,但这样我就不知道该系列何时结束,也无法取消订阅。
我不能返回IObservable的明显原因似乎是因为IObservble不可序列化。是不是有什么我没有想到的东西会让这一切奏效?
一个IOobservable向您推送结果。你无法判断IOobservable何时结束,只能判断它已经结束了。这就是他们的本性。
您没有理由序列化接口本身。
我有点困惑你期望这个方法返回什么——你提到你期望一个可枚举的(即IEnumerable
?),使它成为一个具有单个结果的请求/响应调用。如果是这种情况,您可以使用Observable.FromAsyncPattern
轻松地为结果创建一个IObservable。
然而,如果结果将通过流或回调从服务器单独推送,那么您可以通过Observable创建一个包装器。create在Subscribe上启动连接/请求,并在结果返回时通过OnNext推送结果,并让Dispose关闭流等。
从本质上讲,无论哪种方式,都是在客户端创建一个代理,该代理通过本地创建的IObservable
接口公开常规WCF客户端。这几乎就是所有IObservable
服务的工作方式。
如果在服务器端有一个IObservable要返回,则需要在那里执行相反的操作-将常规客户端调用转换为针对IObservables的订阅,从中通过常规WCF流或回调将结果发送回客户端。