我已经写了十多年的Windows服务,但这是我第一次使用WCF TCP。
问题:
在客户端 - 服务器WCF TCP场景(单独的计算机)中,服务器部分工作正常。客户端代码也可以作为控制台应用程序使用,但是当在Windows服务中运行相同的代码时,它只能在管理员用户下运行。使用网络服务或本地服务(根据此类用法的要求)以下列错误结束:
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:59.8938785'.
An existing connection was forcibly closed by the remote host System
at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size,
SocketFlags socketFlags)
at System.ServiceModel.Channels.SocketConnection.Write(Byte[] buffer, Int32
offset, Int32 size, Boolean immediate, TimeSpan timeout)
System
at System.Net.Security.NegotiateStream.ProcessWrite(Byte[] buffer, Int32
offset, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.NegotiateStream.Write(Byte[] buffer, Int32 offset,
Int32 count)
at System.ServiceModel.Channels.StreamConnection.Write(Byte[] buffer, Int32
offset, Int32 size, Boolean immediate, TimeSpan timeout)
为了简化这种情况,我写了一个WCF服务器作为windows服务,它利用一个简单的[OperationContract]方法获取一个字符串并回复它,因此代码并不是什么大问题。此外,这与服务器或客户端上的超时设置无关,而与客户端用户帐户无关。
在Windows 10 Pro和Windows Server 2003上测试的客户端部分(控制台应用和获胜服务,在不同用户下)具有相同的结果。服务器部分驻留在Windows Server 2003上。全部在.Net 4中。
问题:
管理员用户下的Windows服务不是一个选项,那么如何在本地服务/网络服务下工作的Windows服务上强制使用WCF TCP客户端?
更新
rar格式的WCF tracing report
更新2
Sample Project
此致