我們有一個WCF服務作爲Windows服務託管在我們的應用程序服務器上,並帶有tcp綁定。我們有一個ASP.NET Web應用程序託管在試圖連接到它的單獨的Web服務器上。這兩臺服務器都是Windows 2008 R2機器。ASP.NET Web應用程序無法連接到作爲Windows服務託管的WCF
ASP.NET Web應用程序的應用程序池被設置爲使用ApplicationPoolIdentity作爲其用戶。當我們嘗試連接到從Windows機器出現以下錯誤WCF服務:
Source Exception: System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.ServiceModel.CommunicationException: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:00:09.9980000'. ---> System.IO.IOException: The read operation failed, see inner exception. ---> System.ServiceModel.CommunicationException: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:00:09.9980000'. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.ServiceModel.Channels.SocketConnection.ReadCore(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout, Boolean closing)
然而,當我們更改應用程序池的用戶到網絡服務它連接無誤。
我的問題是兩倍。有誰知道爲什麼使用ApplicationPoolIdentity不起作用,它是某種配置問題?而且,在網絡服務帳戶下運行應用程序池會有什麼壞處?我知道ApplicationPoolIdentity擁有更少的權利,更安全,並被認爲是最佳實踐。
這是一個很好的觀點,ASP.NET Web應用程序每次打開和關閉連接到WCF服務。這個特殊的功能不足以證明維持持久連接的合理性。看起來,ApplicationPoolIdentity沒有權利與外部資源交流,就像在你的情況下一樣。你能解決這個問題嗎? – bwalk2895
就我而言,這是一個阻止這種情況的域策略,所以我們切換到將應用程序池作爲專用域帳戶運行。不確定你的環境是什麼樣的,但檢查防火牆配置。 –
我們必須檢查一下。感謝您的幫助。 – bwalk2895