我使用WCF发送各种消息,这个消息特别是大约3200000字节加上一些字符串和标题。大的paylode是一个序列化的对象,通过另一个服务从主机检索到我试图在各个方面模仿的配置。
我使用netTcp绑定来提高性能,我们正在使用大量的回调。我已经在客户端和服务器端设置了所有可以找到的最高级别的选项。
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IEventMissionService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="10" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="2147483647" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
<security mode="None" />
</binding>
</bindings>
<client>
<endpoint address="net.tcp://localhost:7359/EventMissionMap" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IEventMissionService" contract="RXEventMissionMapService.IEventMissionService" name="NetTcpBinding_IEventMissionService" />
</client>
</system.serviceModel>
我在客户端上收到此非描述性错误消息:
套接字连接已中止。 这可能是由错误引起的 处理您的消息或接收 远程超过超时 主机或底层网络 资源问题。本地套接字超时 是'00:00:59.9979996'。
内在的外在:
远程主机强行关闭现有连接
运行跟踪带来更多信息(堆栈跟踪顶部):
System.ServiceModel.Channels.SocketConnection.Write(字节[] 缓冲区,Int32偏移量,Int32大小, 布尔立即,TimeSpan超时) 堆栈顶部内部扩展: System.Net.Sockets.Socket.Send(字节[] 缓冲区,Int32偏移量,Int32大小, SocketFlags socketFlags)
堆栈顶部内部异常:
System.Net.Sockets.Socket.Send(字节[] 缓冲区,Int32偏移量,Int32大小, SocketFlags socketFlags)
如果我将有效负载设置为null(不发送3.2 MB对象),则消息会毫不费力地通过。
对象来自另一个服务的事实可以解决我的问题吗?在我看来,问题是消息的大小,但是增加配置中的任何选项到目前为止都没有帮助我。
我试图在没有运气的情况下设置客户端。 使用流式传输会切换到请求/响应或删除所有回调...
有什么想法吗?
答案 0 :(得分:0)
我错了!!我在主机端的配置级别上所做的更改是完全不同的服务。最大化缓冲区大小和消息大小就可以了!我不确定哪一个是让它起作用的那个。我只能推荐所有有类似问题的人来查看MaxBufferSize,MaxReceivedMessageSize,ReaderQuotas-&gt; MaxArrayLength以及主机和客户端的一些超时设置。还要在主机端的服务行为中最大化maxItemsInObjectGraph。