WCF:套接字连接已中止

Jes*_*per 3 c# service wcf

CommunicationException was unhandled by user code
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 '02:48:04.9840000'.
Run Code Online (Sandbox Code Playgroud)

几个月来我一直在测试这个应用程序,并且在对其中一个服务进行了一些小改动之后才看到这个错误.它只有几秒钟,所以我不认为这是一个超时问题.

InnerException:System.IO.IOException:读取操作失败,请参阅内部异常

(Inner)InnerException:System.Net.Sockets.SocketException - 远程主机强制关闭现有连接.

任何建议都非常感谢!

提前致谢

Ste*_*ger 9

通常,当对方没有干净地关闭连接时,我已经看到了这个错误.如果在客户端你有一个继承自ClientBase<T>那时的类,你应该Close在完成服务时调用(实际ClientBase<T>实现,IDisposable所以你可以使用一个using语句).

如果您使用a ChannelFactory<T>来创建与服务的连接,则结果是实现合同但也实现的代理ICommunicationObject; 你完成后应该打电话给Close你.

在服务方面,事情并不相同,会话(以及底层套接字)由客户端管理.如果服务正在丢失套接字,那很可能是错误的结果,在这种情况下,Music Magi的建议很好.微软在这里讨论如何解决这个问题.

请注意,要清楚了解正在发生的情况,您可能需要为客户端和服务设置跟踪.要查看您将使用的跟踪SvcTraceViewer应该在Program Files\Microsoft SDKs\Windows\v6.0A\binProgram Files\Microsoft SDKs\Windows\v7.0A\bin文件夹中.如果必须跟踪客户端和服务,则可以SvcTraceViewer使用File / Add菜单一起打开这两个文件.