我的應用程序有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有關無法處理低級別例外情況。我會隨時向您通報我調查的進展情況。
客戶端關閉連接(我們控制客戶端應用程序),但這仍然是一個好點。例如,如果客戶端應用程序崩潰(或被殺害),它可能沒有機會關閉代理。但是在這種情況下,如果服務器達到連接的最大數量,服務器不會拋出錯誤? – Sylvain 2009-08-07 12:37:33
我會嘗試降低服務器上的receiveTimeout。如果我開始超時,這將表明客戶端關閉代理的方式存在問題。 – Sylvain 2009-08-07 12:51:39
我降低了receiveTimeout。這並沒有改變任何事情。我即將排除我沒有連接的想法。我在受控環境中做了一個測試:當一個服務器用完連接時,客戶端收到的錯誤是TimoutException,而不是CommunicationException,比如我在生產中得到的錯誤。所以我認爲這是別的。 – Sylvain 2009-08-13 18:13:47