2009-08-06 47 views
0

我的應用程序有50個服務端點(如/mysite/myService.svc)。它在IIS中託管。間歇性地(每兩天或三天一次)服務停止響應。它永遠不會是掛起的同一個服務。當一項服務被掛起時,其他服務的一些工作正常,另一些服務也被掛起。WCF服務掛起和客戶端收到ServiceModel.CommunicationException

所有客戶端(從不同的計算機)收到此錯誤:

ServiceModel.CommunicationException 

Message: An error occurred while receiving the HTTP response to 
https://server/mysite/myservice1.svc. 

This could be due to the service endpoint binding not using the HTTP 
protocol. This could also be due to an HTTP request context being 
aborted by the server (possibly due to the service shutting down). 
See server logs for more details. 

無異常由當客戶端試圖調用掛起該服務的服務器提高。我所擁有的只是客戶端的錯誤。

我不得不手動回收應用程序池來解決問題。

你知道可能是什麼原因嗎?我該如何調查這個問題?當服務掛起時,我願意將工作進程的內存轉儲取出,但我不知道在轉儲中搜索什麼。

更新(2009年8月13日):我幾乎排除了服務器用完連接的想法(請參閱Shiraz Bhaiji的回答中的評論)。我可能會有一個新的潛在客戶:我將所有服務器端異常記錄在日誌文件中。所以理論上,當客戶端發生這種情況時,服務器上不會產生異常;否則我會在我的日誌中證明這一點。但是如果在服務器上發生了錯誤,但是在低級別發生異常未被路由到我的異常處理代碼的情況呢?我已發佈this question有關無法處理低級別例外情況。我會隨時向您通報我調查的進展情況。

回答

1

要解決這個問題,我們將establishSecurityContext設置爲False。

0

我還沒有遇到過這個問題,但會建議在服務和/或客戶端應用程序的配置中啓用WCF服務的跟蹤/消息日誌記錄(如果您有控制權的話)。過去幾天我已經完成了我需要排除故障的服務。

的MSDN鏈接here是一個很好的起點。

也看到表中this後的跟蹤細節,您可以配置的不同級別。有幾個級別可以從例外記錄到完整的消息細節。在app.config文件中設置它非常快。

要解析日誌文件輸出,請使用Windows SDK附帶的SvcTraceViewer.exe,如果安裝了它,應該位於以下文件夾中:C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0 \ Bin

1

聽起來就像你正在用盡連接。

默認情況下WCF有超時,因此持有開放10分鐘的連接。

當您回收應用程序池時,所有連接都關閉,因此重新開始工作。

要修復它檢查你的代碼,以確保您有密切聯繫/處置代理。

+0

客戶端關閉連接(我們控制客戶端應用程序),但這仍然是一個好點。例如,如果客戶端應用程序崩潰(或被殺害),它可能沒有機會關閉代理。但是在這種情況下,如果服務器達到連接的最大數量,服務器不會拋出錯誤? – Sylvain 2009-08-07 12:37:33

+0

我會嘗試降低服務器上的receiveTimeout。如果我開始超時,這將表明客戶端關閉代理的方式存在問題。 – Sylvain 2009-08-07 12:51:39

+0

我降低了receiveTimeout。這並沒有改變任何事情。我即將排除我沒有連接的想法。我在受控環境中做了一個測試:當一個服務器用完連接時,客戶端收到的錯誤是TimoutException,而不是CommunicationException,比如我在生產中得到的錯誤。所以我認爲這是別的。 – Sylvain 2009-08-13 18:13:47