2012-12-19 113 views
1

我們有一個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擁有更少的權利,更安全,並被認爲是最佳實踐。

回答

0

答案取決於您在網絡,服務器和服務中的不同配置。

我遇到過類似情況,ApplicationPoolIdentity沒有權限與機器外部的資源進行通話。

另一個問題可能是如何處理Web應用程序和服務器之間的連接。您是否每次重複使用同一個連接,或者您是否關閉/重新打開頻道? This msdn thread有一些這方面的信息。

+0

這是一個很好的觀點,ASP.NET Web應用程序每次打開和關閉連接到WCF服務。這個特殊的功能不足以證明維持持久連接的合理性。看起來,ApplicationPoolIdentity沒有權利與外部資源交流,就像在你的情況下一樣。你能解決這個問題嗎? – bwalk2895

+0

就我而言,這是一個阻止這種情況的域策略,所以我們切換到將應用程序池作爲專用域帳戶運行。不確定你的環境是什麼樣的,但檢查防火牆配置。 –

+0

我們必須檢查一下。感謝您的幫助。 – bwalk2895

相關問題