我正在使用WCF PollingDuplexHttpBinding渠道将通知推送到Silverlight客户端。在大多数情况下它运作良好,但我正在努力使一些基础会话管理功能正常工作。
我遇到的最大问题是让服务器知道客户端已完成会话,不再需要任何通知。客户端上的CloseAsync调用会阻止通道的客户端发送仅针对该会话的新通知请求,并且还会向服务器发送CloseSession SOAP请求。问题是频道的服务器端发回404说它不能识别CloseSession动作。据我所知,该错误来自PollingDuplexHttpBinding通道的内部,并且不会使应用程序无法正常处理会话闭包。
还有其他人遇到过这个问题,或许找到了解决方法吗?
答案 0 :(得分:2)
无法通过外观Gripes on PollingDuplexHttpBinding来完成。
答案 1 :(得分:1)
那个抱怨文章真棒,并间接解决了我在Silverlight上通过HTTP进行双工时非常慢的相关问题。实际上,问题是由于在网站上打开ASP.Net会话状态并使用Silverlight的BroserHttp堆栈(而不是ClientHttp堆栈)引起的。
Yavor在解释问题方面做得很好(在本文中):
简单的解决方法是,如果遇到此问题,请在调用服务之前为ClientHttp堆栈注册路由。这可以通过调用:
来完成WebRequest.RegisterPrefix(requestUri.AbsoluteUri, WebRequestCreator.ClientHttp);
其中requestUri是您的服务的Uri。希望这会有所帮助。