从WCF返回IObservable <t> </t>

时间:2013-12-06 16:23:46

标签: c# wcf push-notification system.reactive

我希望能够直接或从回调中从WCF调用返回IObservable。这样做的原因是我可以收到一个我将订阅的可枚举数,并且能够一次处理一个结果。

我可以轻松地使用回调来逐个获取结果的推送通知,但是我不知道该系列何时结束,并且无法取消订阅。

我无法返回IObservable的显而易见的原因似乎是因为IObservable不可序列化。有什么我没有想过会让这个工作吗?

1 个答案:

答案 0 :(得分:2)

IObservable会向您推送结果。您无法判断IObservable何时结束,只有它已经结束。这是他们的本性。

您没有理由自行序列化接口。

我对你希望这个方法返回的内容感到有点困惑 - 你提到你期待一个可枚举的(即IEnumerable?)使这个请求/响应调用只有一个结果。如果是这种情况,您可以使用Observable.FromAsyncPattern轻松地为结果创建IObservable。

但是,如果结果将通过Stream或回调单独从服务器推送,那么您可以通过Observable.Create创建一个包装器,它在Subscribe上启动连接/请求并通过OnNext将结果推出他们回来了,让Dispose关闭流等。

基本上,无论哪种方式,您都在客户端创建一个代理,通过本地创建的IObservable接口公开常规WCF客户端。这几乎是所有IObservable服务的工作方式。

如果在服务器端你有一个IObservable要返回,你需要在那里反向 - 将常规客户端调用转换为针对IObservable的订阅,通过常规WCF Streams将结果发送回客户端或者回调。