2010-09-22 101 views
2

我在IIS中設置了WCF Silverlight(3)Http雙工服務。直到我回收IIS中的ApplicationPool時,它工作得非常好。WCF用IIS AppPool回收的雙工服務問題

然後調用此雙工服務方法的連接的SL客戶端開始從Web服務獲取TimeoutExceptions/CommunicationExceptions。增加客戶端的超時並不能提供幫助。

回收似乎不會終止服務器和客戶端之間的基礎(雙工)http連接。 當客戶端隨後調用此服務的方法時,IIS無法正確處理它。

如果我在客戶端上重新創建代理,一切都可以正常工作。問題是,我怎麼知道我需要重新建立到服務器的連接呢? 不是 網絡上的所有示例僅顯示如何處理斷開連接的客戶端,但不顯示如何處理Web服務已被回收的情況。完全重啓IIS是可以的,因爲在這種情況下http連接是關閉的。

任何輸入,非常感謝。

+0

我會推薦使用自主託管任何嚴重的WCF工作,甚至更適合雙工場景。自己託管一個WCF服務真的不那麼難,然後你不依賴像AppPools那樣隨意回收的東西...... – 2010-09-22 20:30:41

回答

1

它是預期的行爲。這是雙工http如何工作。雙工http通信使用可靠會話。這意味着一切都運作良好,直到一方關閉。如果AppPool被回收,則運行服務實例被終止。下一次客戶端嘗試與服務進行通信時,它無法訪問它(實例已不存在),但由於可靠會話,它嘗試多次,然後拋出超時。超時之後的唯一解決方案是中止當前代理,創建新的客戶端代理並啓動新的雙工通信。

+2

是的,我得出了同樣的結論。我們現在只是捕捉客戶端上的異常並重新建立連接。 – 2010-09-27 18:49:32