Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回IObservable<;T>;来自WCF_C#_Wcf_Push Notification_System.reactive - Fatal编程技术网

C# 返回IObservable<;T>;来自WCF

C# 返回IObservable<;T>;来自WCF,c#,wcf,push-notification,system.reactive,C#,Wcf,Push Notification,System.reactive,我希望能够从WCF调用返回IObservable,可以是直接返回,也可以是回调返回。这样做的原因是,我可以收到一个我将订阅的枚举,并能够一次处理一个结果 我可以很容易地使用回调一次只获取一个结果的推送通知,但这样我就不知道该系列何时结束,也无法取消订阅 我无法返回IObservable的明显原因似乎是因为IObservable不可序列化。有没有什么我没想到的东西可以让它发挥作用?一个IObservable将结果推给你。你无法判断一个IObservable何时会结束,只知道它已经结束了。这是他们的

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

我可以很容易地使用回调一次只获取一个结果的推送通知,但这样我就不知道该系列何时结束,也无法取消订阅


我无法返回IObservable的明显原因似乎是因为IObservable不可序列化。有没有什么我没想到的东西可以让它发挥作用?

一个IObservable将结果推给你。你无法判断一个IObservable何时会结束,只知道它已经结束了。这是他们的本性

您没有理由序列化接口本身

我对这个方法将返回什么感到有点困惑——您提到您希望有一个可枚举的(即,
IEnumerable
?)使它成为一个带有单个结果的请求/响应调用。如果是这种情况,您可以使用
Observable.FromAsyncPattern
轻松为结果创建一个IObservable

但是,如果结果将通过流或回调从服务器单独推送,那么您可以通过Observable.create创建一个包装器,该包装器在订阅时启动连接/请求,并在结果返回时通过OnNext推送结果,并让Dispose关闭流等

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


如果在服务器端有一个IObservable要返回,则需要执行相反的操作—将常规客户端调用转换为针对IObservable的订阅,然后通过常规WCF流或回调将结果发送回客户端。

返回IObservable的具体实现。像MyObservableDerper什么的。是的。就这样。我必须在回调中单独发送每个项目,并实现一个带有Subject的类来接收结果,并让本地客户端订阅它。