WCF调用TCP 10048错误

网站,调用编写了缓冲功能的WCF,看上去一切正常。结果没多久忽然发现网站几乎不能访问了,偶尔会可以用一下,然后又抽风了……把网站的错误日志拉下来一看,统统都是这个错:

    TCP 错误代码 10048: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。

   

    查了很多资料,也想了很多办法,甚至用截包软件分析了TCP数据流,最后发现,好白痴啊:当没有设置过TCP参数的时候,Windows服务器默认定义用户可用TCP端口号5000个,每个TCP连接的回收等待时间是10分钟。也就是说,每10分钟只能有5000个WCF调用通道可供使用,1分钟500个,1秒钟8.3个。假设,每个页面要使用4次调用(由于页面都是用多个控件拼接出来的,所以多次调用也很正常),就是说,每秒的页面刷新量不能超过2次。这还不堵塞,真是没天理了。

    解决方案:

    1 修改用户使用TCP端口上限

    注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

    添加或修改DWORD项MaxUserPort,设置值为60000(MS建议ExchangeServer的设置);

    2 修改TCP线程自动回收等待时间

    注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

    添加或修改DWORD项TCPTimeWaitDelay,设置值为60(这里的单位是秒,可以比1分钟更短,视具体情况而定);

    修改完这部分的注册表,是要重新启动服务器才起效的。

    注意:这是改IIS服务器的注册表,而不是WCF服务器的注册表。当然通常它们是一台服务器,不过是一台服务器的话,也没必要这么麻烦了吧。

    经过这样的修改,每秒可以支持1000个WCF调用通道生成,总算是不报错了。--b

    当然,如果可以的话,还是要尽量采用连接池方法,减少系统开销。

    总之目前是临时修正掉这个错误了,让做网站的同事慢慢优化程序去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值