您的位置:首页 > 其它

套接字连接中断:The socket connection was aborted

2012-07-11 10:27 706 查看
       问题还原:我们的存储服务是基于WCF服务实现的,协议采用NetTcpBinding(约定,不可变更的),数据库中有一张表(图片信息是以二进制方式存储的),我们在插入一个小于64K的图片时,并没有产生任何错误。然而当我们添加一个90K的图片时,便产生了红色的异常信息。

  

       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:09:59.9669967'.


      

       WCF编程开发过程时,使用NetTcpBinding绑定协议,作为通讯协议,可能会引发这样的异常,导致数据如法传输。套接字连接中断,可能是由于消息处理错误,或者远程宿主接受超时引起,或者是底层网络资源问题导致,本地套接字时间是'00:09:59.9669967'。MSDN上讨论的解决办法,更换其他的绑定协议确实可以解决问题,解决方案如下:

WSHttpBinding binding = new WSHttpBinding();
binding.ReceiveTimeout = new TimeSpan(10, 10, 10);

        

       不过这种方案在某些情况下并不适用

      问题关键:查看详细的异常的信息,我们发现一个值(65535)64K大小的限制 ,这个值一般是由于并没有对传输大小进行配置,采用了默认配置。仔细确认后,我们发现服务器端的maxBufferSize并未大小设置,导致了这个问题。     


因为我们使用的通信协议是无法变更的!我们在不改变绑定协议的基础上的解决方案如下:

       1.检查客户端及服务器的服务配置文件,在配置文件中需要调整的一些参数:

<bindings>
<netTcpBinding>
<binding name="MyTcpBinding" closeTimeOut="10:00:00" openTimeOut="10:00:00" recieveTimeOut="10:00:00"
sendTimeOut="10:00:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
maxRecieveMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<reliableSession inactivityTimeout="24.00:00:00" />
<security mode="None"/>
</netTcpBinding>
</bindings>

       2.确保可序列化的对象的大小,同样在客户端或服务器端配置:

Client配置:

<endpointBehaviors>
<behavior name="ClientBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>


Server配置:

<serviceBehaviors>
<behavior name="HostBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
<serviceBehaviors>

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐