Silverlight客户端通知的PollingDuplex是否正确?

Silverlight客户端通知的PollingDuplex是否正确?,silverlight,wcf,Silverlight,Wcf,我想知道PollingDuplex是否是解决我问题的正确方法 以下是我的设想: 1.第三方应用程序向服务器应用程序发送带有客户端IP地址的UDP数据包。 2.服务器应用程序需要通知指定的客户端并发送一些数据 客户端是一个Silverlight应用程序 我一直在看一些指南和示例代码(http://petermcg.wordpress.com/2008/09/03/silverlight-polling-duplex-part-1-architecture/)但我不明白如何使用PollingDupl

我想知道PollingDuplex是否是解决我问题的正确方法

以下是我的设想: 1.第三方应用程序向服务器应用程序发送带有客户端IP地址的UDP数据包。 2.服务器应用程序需要通知指定的客户端并发送一些数据

客户端是一个Silverlight应用程序

我一直在看一些指南和示例代码(http://petermcg.wordpress.com/2008/09/03/silverlight-polling-duplex-part-1-architecture/)但我不明白如何使用PollingDuplex在服务器上识别客户端。我知道客户机在服务器上注册,并不断轮询消息。我如何确保只有正确的客户端才能获得为该客户端指定的消息?换句话说,服务器上的消息不应广播到所有轮询客户端,而应仅发送到一个特定客户端


非常感谢您的帮助。

轮询双工实际上是一个完全的客户端实现,仅适用于Silverlight(没有常规的.NET framework版本,除了Codeplex Microsoft内部咨询服务上的一个项目,该项目是为他们的高知名度客户开发的)。在服务器端,它没有什么特别之处

微软自己承认,这并不是真的要用于生产(我们公司有一位微软联系人,他坦率地向我们承认了这一点)。它不是很健壮,也没有很好的实现,在任何类型的卷下都可以/将DoS您的服务器:

您最好使用自己的客户端轮询机制,或者(更好、更可扩展)在Silverlight 4中使用TCP with session,它提供真正的双工支持(因为连接不是无状态的,因此支持真正的推送通知):
.

无论您使用的是Net.TCP还是HttpDuplexBinding,都可以使用
OperationContext.Current.Channel.SessionId
识别客户端。更具体地说,您可以使用
OperationContext.Current.GetCallbackChannel()
获取WCF用来与他们交谈的实际频道。您可以将它们存储在内存中,可能与从客户机传递过来的其他标识符相关,并且当您需要与相关客户机通信时(例如,要将UDP数据包中的数据传递给它们),您可以在该特定存储通道上调用适当的方法;客户将得到通知


我应该注意到,虽然我并不特别推荐HttpDuplexBinding,但除了它的怪癖、稳定性和性能问题之外,它应该适用于您正在做的事情,并且以与Net.TCP完全相同的方式工作。虽然客户端在技术上会“轮询”服务器,但这对您来说是隐藏的。在服务器上,您所知道的只是在特定通道上调用一个方法。底层绑定代码负责确保正确的客户端得到通知。

我支持使用Net.TCP的建议。我们花了很多时间处理HttpPollingDuplex绑定,虽然我们或多或少地让它工作起来,但它非常脆弱,而且似乎不需要花很多时间就可以连接到fault。一旦我们切换到Net.TCP WCF绑定,我们就高兴多了。使用HttpPollingDuplex的真正原因只有两个:(1)如果您需要安全连接,即SSL;或者(2)你不能依赖端口4502-4534+943是开放的。我同意PollingDuplex是脆弱的。