我有一个托管在服务器上的 .Net 服务,以及通过 Internet 连接到该服务器的 .Net 客户端。
我想实现一个发布订阅模型,客户端可以订阅服务上的事件,并在数据可用时将数据推送给他们。另一种方法是让客户端轮询服务器以获取数据,但这对于所需的内容可能太慢了。因此需要发布/订阅类型的通信。
我知道 WCF 绑定 WSDualHttpBinding 确实允许这样做,但是它有一个缺点。根据“Programming WCF Services”作者 Juval Lowy 的说法,
... WSDualHttpBinding 几乎无法使用,因为实际上不可能通过将服务与客户端分开的各种通信障碍进行隧道传输,并且需要找到特定的 Web 服务器机器使得这不切实际。
我将其解释为(如果我错了,请纠正我)要使用 WSDualHttpBinding 进行操作,客户端必须在其机器上打开一个端口(以及任何必要的路由器配置),以便服务器回调通过。如果是这种情况,我不会选择使用 WSDualHttpBinding。也不能选择使用 Windows Azure。
所以我的问题的症结在于,我怎样才能在互联网上实现发布/订阅/回调类型的通信,而不需要在客户端机器上打开端口?开放标准是可以的,但没有必要,因为客户端和服务器都是 .Net,Windows Azure 不是一个选项。