依稀记得很久以前就看到了一些关于这个问题的讨论,但从那时起就没有听到任何消息。所以你基本上可以在远程机器上订阅IObservable吗?
答案 0 :(得分:7)
您可以使用IObservable.Remotable通过.NET Remoting直接从其他计算机使用observable。
答案 1 :(得分:4)
在第9频道上发现这个很酷的视频,其中一个使用 IObservable.Remotable 的例子如Paul所指出的那样:
非常有趣的东西,现在花点时间玩它吧! :-D
答案 2 :(得分:4)
另一种可能的解决方案是使用命名管道。
有一个优秀的NuGet包NamedPipeWrapper,请参阅source on GitHub。在这上面写一个瘦的RX包装器会很容易,即订阅RX流并使用这个库将消息推送到其他.NET监听进程。
由于此解决方案使用命名管道,因此它将是一个真正的发布/订阅解决方案,它将支持不同进程中的多个订阅者。
<强>更新强>
在命名管道库上编写简单的RX桥接代码确实非常容易。使用RX Subject
并将RX桥接代码插入事件处理程序。它的两端不超过4行额外代码。如果有人有兴趣,我可以发布代码。
<强>更新强>
有关命名管道的更多信息,请参阅.NET 3.5 Adds Named Pipes Support和Interprocess Communication Using .NET 3.5 Named Pipes IO。前面提到的NuGet包NamedPipeWrapper
是.NET 3.5引入的命名管道的内置支持的更好的版本。
答案 3 :(得分:3)
是
RX内置支持使用.NET Remoting跨越流程边界。
如果您安装NuGet包rx-remoting
,它将安装程序集System.Reactive.Runtime.Remoting.dll
,它提供对跨进程RX消息的支持。
有关Microsoft的演示代码,请参阅RX Across Processes。我刚刚测试了此页面上的代码,它运行良好。为了使其编译,您需要添加以下引用:
Reactive Extensions - Main Library
(搜索reactive extensions main
)Reactive Extensions - .NET Remoting Support
(搜索reactive extensions remoting
)System.Runtime.Remoting
(作为普通参考添加,此程序集附带.NET)@theburningmonk提到的第9频道视频也值得关注。
<强>更新强>
不幸的是,此解决方案有一个很大的限制:您只能监听一个客户端进程(所有后续客户端都无法连接)。 Pushqa解决了这个问题(请参阅我的其他答案)。从本质上讲,任何在发布/订阅信号总线上实现RX的库都应该可以解决问题。
答案 4 :(得分:3)
是
查看Pushqa。
答案 5 :(得分:0)
没有理由不设计框架来做到这一点。框架必须提供一种方法来处理远程对象,为它们生成代理,然后跨应用程序边界封送远程对象的活动(即通过套接字通信)。 .NET Remoting可能是实现此目的的合适选项。 WCF会更好。
答案 6 :(得分:0)
您是否特意使用Rx作为解决问题的方法? WCF提供双工服务,客户端可以将回调端点注册到服务。然后,服务可以根据需要向其客户端发起回叫。它实际上是一种远程观察者模式。如果RX是必须的,那么使用RX支持框架包装WCF双工服务应该是相当严格的,允许您的客户端“透明地”观察IObservable的服务行为。