2009-11-04 88 views
1

我正在使用WCF PollingDuplexHttpBinding通道將通知推送到Silverlight客戶端。大多數情況下,它運行良好,但我正在努力爭取一些基礎會話管理功能正常工作。使用PollingDuplexHttpBinding關閉會話

我得到的最大問題是試圖讓服務器知道客戶端已完成會話,不再需要任何通知。客戶端上的CloseAsync調用會阻止通道的客戶端發送針對該會話的新通知的請求,並且還會向服務器發送CloseSession SOAP請求。問題是通道的服務器端發回404,表示它不能識別CloseSession動作。據我可以看到,錯誤來自PollingDuplexHttpBinding通道的內部,並且沒有完成到應用程序,因此可以適當地處理會話關閉。

有其他人遇到過這個問題,也許找到了解決辦法嗎?

回答

1

那麼抱怨的文章真棒,並間接地解決了一個相關的問題,我一直在使用雙工通過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。希望這可以幫助。