使用PollingDuplexHttpBinding关闭会话

时间:2009-11-04 14:32:20

标签: wcf silverlight pollingduplexhttpbinding

我正在使用WCF PollingDuplexHttpBinding渠道将通知推送到Silverlight客户端。在大多数情况下它运作良好,但我正在努力使一些基础会话管理功能正常工作。

我遇到的最大问题是让服务器知道客户端已完成会话,不再需要任何通知。客户端上的CloseAsync调用会阻止通道的客户端发送仅针对该会话的新通知请求,并且还会向服务器发送CloseSession SOAP请求。问题是频道的服务器端发回404说它不能识别CloseSession动作。据我所知,该错误来自PollingDuplexHttpBinding通道的内部,并且不会使应用程序无法正常处理会话闭包。

还有其他人遇到过这个问题,或许找到了解决方法吗?

2 个答案:

答案 0 :(得分:2)

无法通过外观Gripes on PollingDuplexHttpBinding来完成。

答案 1 :(得分:1)

那个抱怨文章真棒,并间接解决了我在Silverlight上通过HTTP进行双工时非常慢的相关问题。实际上,问题是由于在网站上打开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。希望这会有所帮助。