我希望能够直接或从回调中从WCF调用返回IObservable。这样做的原因是我可以收到一个我将订阅的可枚举数,并且能够一次处理一个结果。
我可以轻松地使用回调来逐个获取结果的推送通知,但是我不知道该系列何时结束,并且无法取消订阅。
我无法返回IObservable的显而易见的原因似乎是因为IObservable不可序列化。有什么我没有想过会让这个工作吗?
答案 0 :(得分:2)
IObservable会向您推送结果。您无法判断IObservable何时结束,只有它已经结束。这是他们的本性。
您没有理由自行序列化接口。
我对你希望这个方法返回的内容感到有点困惑 - 你提到你期待一个可枚举的(即IEnumerable
?)使这个请求/响应调用只有一个结果。如果是这种情况,您可以使用Observable.FromAsyncPattern
轻松地为结果创建IObservable。
但是,如果结果将通过Stream或回调单独从服务器推送,那么您可以通过Observable.Create创建一个包装器,它在Subscribe上启动连接/请求并通过OnNext将结果推出他们回来了,让Dispose关闭流等。
基本上,无论哪种方式,您都在客户端创建一个代理,通过本地创建的IObservable
接口公开常规WCF客户端。这几乎是所有IObservable
服务的工作方式。
如果在服务器端你有一个IObservable要返回,你需要在那里反向 - 将常规客户端调用转换为针对IObservable的订阅,通过常规WCF Streams将结果发送回客户端或者回调。