这里纪录平常使用WCF时候遇到的一些问题,希望给有遇到相同问题的人一些参考!
1. 最近项目中使用WCF服务自动同步一下JSON的静态文件,WCF服务寄宿在Windows服务中,由于服务客户端是IIS,对外提供接口调用比较频繁,日志记录出来的错误如下:
套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:00:58.9362455”。
远程主机强迫关闭了一个现有的连接。
我开始写了一个测试程序,新建100个线程,每个线程调用10次WCF服务,异常妥妥的出现了。
开始以为是超时时间太短了,调用频率太高,服务队列里等待时间超时,更改了服务接收和发送的超时时间为1个小时,还是有这个问题。也看了一下网上其他人遇到此问题的设置security mode="None", 依然无效
<binding name="defaultTcpBinding" closeTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00" maxConnections="3000" openTimeout="01:00:00"> <readerQuotas maxStringContentLength="10240000" /> <security mode="None" /> </binding>
后来查资料,看看服务绑定的其他配置项的作用,找到了一个listenBacklog="3000",果断把这个值设置大一点,再跑一下测试程序,异常解决!配置如下
<binding name="defaultTcpBinding" closeTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00" maxConnections="3000" openTimeout="01:00:00" listenBacklog="3000"> <readerQuotas maxStringContentLength="10240000" /> <security mode="None" /> </binding>
listenBacklog 可为 Web 服务挂起的最大排队连接请求数。 这是一个套接字级别属性,控制可能为 Web 服务挂起的最大排队连接请求数。ListenBacklog 太低时,WCF 将停止接受请求,并因此删除新连接,直到服务器承认一些现有队列连接。默认值为 16 * 处理器数。
服务中还是需要合理控制客户端连接数量,以上仅作为参考实验用参数,实际配置还需要根据实际情况合理配置。
时间: 2024-11-03 05:21:45