1

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

我遇到的最大问题是试图让服务器知道客户端已完成会话并且不再需要任何通知。客户端上的 CloseAsync 调用会阻止通道的客户端仅为该会话发送新通知的请求,并且它还会向服务器发送 CloseSession SOAP 请求。问题是通道的服务器端发回 404 表示它无法识别 CloseSession 操作。据我所见,错误来自 PollingDuplexHttpBinding 通道的内部,并没有弥补到应用程序,因此可以正确处理会话关闭。

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

4

2 回答 2

2

不能通过外观来完成,对 PollingDuplexHttpBinding 的抱怨

于 2009-11-17T11:47:20.823 回答
1

好吧,那篇抱怨文章太棒了,间接解决了我在通过 HTTP 进行 Duplex 时遇到的 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。希望这可以帮助。

于 2011-02-14T16:57:03.843 回答