无法通过WCF发送大型消息

时间:2010-12-07 13:13:42

标签: wcf nettcpbinding duplex large-data

我使用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对象),则消息会毫不费力地通过。

对象来自另一个服务的事实可以解决我的问题吗?在我看来,问题是消息的大小,但是增加配置中的任何选项到目前为止都没有帮助我。

我试图在没有运气的情况下设置客户端。 使用流式传输会切换到请求/响应或删除所有回调...

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我错了!!我在主机端的配置级别上所做的更改是完全不同的服务。最大化缓冲区大小和消息大小就可以了!我不确定哪一个是让它起作用的那个。我只能推荐所有有类似问题的人来查看MaxBufferSize,MaxReceivedMessageSize,ReaderQuotas-&gt; MaxArrayLength以及主机和客户端的一些超时设置。还要在主机端的服务行为中最大化maxItemsInObjectGraph。