我正在使用WCF PollingDuplexHttpBinding通道将通知推送到Silverlight客户端。在大多数情况下,它工作得很好,但我正在努力让一些基本的会话管理功能正常工作。
我遇到的最大问题是试图让服务器知道客户端已经完成了会话,不再需要任何通知。客户端上的CloseAsync调用会阻止通道的客户端仅发送该会话的新通知请求,它还会向服务器发送CloseSession SOAP请求。问题是,通道的服务器端返回了一个404,表示它无法识别CloseSession操作。据我所知,这个错误是来自PollingDuplexHttpBinding通道的内部,并没有弥补到应用程序中,因此会话关闭可以得到适当的处理。
有没有其他人遇到过这个问题,也许找到了解决方法?
发布于 2009-11-17 19:47:21
光凭外表是不行的,Gripes on PollingDuplexHttpBinding。
发布于 2011-02-15 00:57:04
这篇抱怨文章太棒了,间接地解决了我在HTTP上做双工时Silverlight运行非常慢的一个相关问题。简单地说,这个问题是由于在网站中打开了ASP.Net会话状态并使用了Silverlight的BroserHttp堆栈(而不是ClientHttp堆栈)造成的。
Yavor (在本文中)很好地解释了这个问题:
http://blogs.msdn.com/b/silverlightws/archive/2009/09/30/having-a-pollingduplex-service-and-any-other-wcf-service-in-the-same-website-causes-silverlight-calls-to-be-slow.aspx
如果您遇到此问题,简单的解决方法是在调用服务之前为ClientHttp堆栈注册一个路由。这可以通过调用以下命令来完成:
WebRequest.RegisterPrefix(requestUri.AbsoluteUri, WebRequestCreator.ClientHttp);其中requestUri是您的服务的Uri。希望这能有所帮助。
https://stackoverflow.com/questions/1674111
复制相似问题