我们有一个WCF服务作为Windows服务托管,在我们的应用服务器上使用tcp绑定。我们有一个ASP.NET Web应用程序托管在尝试连接到它的单独Web服务器上。两台服务器都是Windows 2008 R2计算机。
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 :(得分:0)
答案取决于您在网络,服务器和服务中的不同配置。
过去我遇到过类似的情况,即ApplicationPoolIdentity无权与机器外部的资源进行“对话”。
另一个问题可能是如何处理Web应用程序和服务器之间的连接。您是在每次重复使用相同的连接,还是在关闭/重新打开频道? This msdn thread有一些相关信息。