C# 如何在internet上实现发布/订阅通信
我有一个托管在服务器上的.Net服务,以及通过internet连接到此服务器的.Net客户端 我想实现一个发布-订阅模型,其中客户端可以订阅服务上的事件,并在数据可用时将数据推送到它们。另一种方法是让客户机轮询服务器以获取数据,但是这可能太慢,无法满足需要。因此需要发布/订阅类型的通信 我知道WCF绑定WSDualHttpBinding确实允许这样做,但是它有一个缺点。根据“WCF服务编程”作者Juval Lowy的说法 …WSDualHttpBinding主要是 无法使用,因为它实际上是 无法通过各种隧道 沟通障碍分隔了 来自客户的服务和需求 查找特定web服务器计算机的步骤 这使得这不切实际 我将其解释为(如果我错了,请纠正我)要使用WSDualHttpBinding进行操作,客户端必须在其机器上打开一个端口(以及任何必要的路由器配置),以便服务器通过该端口进行回调。如果是这种情况,那么使用WSDualHttpBinding将不是我的选择。使用Windows Azure也不是一个选项C# 如何在internet上实现发布/订阅通信,c#,.net,wcf,web-services,publish-subscribe,C#,.net,Wcf,Web Services,Publish Subscribe,我有一个托管在服务器上的.Net服务,以及通过internet连接到此服务器的.Net客户端 我想实现一个发布-订阅模型,其中客户端可以订阅服务上的事件,并在数据可用时将数据推送到它们。另一种方法是让客户机轮询服务器以获取数据,但是这可能太慢,无法满足需要。因此需要发布/订阅类型的通信 我知道WCF绑定WSDualHttpBinding确实允许这样做,但是它有一个缺点。根据“WCF服务编程”作者Juval Lowy的说法 …WSDualHttpBinding主要是 无法使用,因为它实际上是 无法
因此,我的问题的关键是,如何在不需要打开客户端机器上的端口的情况下通过internet实现发布/订阅/回调类型的通信?开放标准可以,但没有必要,因为客户端和服务器都是.Net,所以Windows Azure不是一个选项。WSDualHttpBinding包含两个通道,一个从客户端到服务器,另一个从服务器到客户端。后者确实需要防火墙和NAT配置。那么Net.Tcp呢?它只使用单通道,并支持通过该通道从客户端到服务器发起的回调(双工通信)。您提到客户端和服务器都将是.NET应用程序,因此在服务器上配置一些防火墙应该是可能的。您在文章中提到了大多数选项 有3种选择:
- 客户端轮询服务器。不需要打开端口,但速度太慢
- WSDualHttpBinding需要打开端口
- Azure服务总线可以做到这一点,但不是一个选项
您可以尝试的另一件事是nservicebus at,这是一种开源的.net服务总线。Internet Communication Engine(ICE)提供 它是开源的,如果您下载了安装,那么有一个示例VisualStudio项目演示了如何实现发布/订阅(请查看“demos”.zip文件和带有时钟演示的“IceStorm”目录)
ICE将为您完成所有繁重的工作,学习曲线非常短,主要是因为文档量大、易懂且编写良好。我强烈推荐您通过互联网使用DDS(OMG的数据分发服务) 天哪,这就是我要说的。是的,我知道你可能认为OMG结束了。我没有,作为一名政府顾问,我真的在推动标准。请记住,除了自由主义的意识形态和危机,政府仍然是一个巨大的客户,相互合作是必须的 服务巴士?好吧,好吧,那很好,但是现在开始不是太复杂了吗?学习曲线太。。。陡峭的?我想不是,但是,有更简单的吗 冰是个不错的选择。来自CORBA世界的人试图让事情变得更好。不要怀疑它,使用它,尝试它!只是一种感觉:即使使用storm服务,您也可能会觉得您仍然处于请求/回复世界中。。。但这是个骗局吗
但是,如果您更喜欢一个商业但开放的解决方案,可以考虑使用协议缓冲区发布订阅(搜索Google协议缓冲区)。。。这只是第一步。这是我的工作。。。抱歉,这只是一个初始项目,但我正在使用一个中央代理发行版作为替代传输(默认为多播,但广播和udp也可用)。开源,所以免费…谢谢,我会看看这个选项。