WCF的字符串太长

时间:2009-09-10 05:45:30

标签: c# .net wcf string

我正在尝试通过WCF发送长字符串,大约64k字符长。当发送一个长字符串时,我得到HTTP错误400.但是当我发送更短的字符串时,一切正常。 这是我使用的WCF接口和app.config。

我的留言合同:

[MessageContract]
public class MessageClass
{
    [MessageHeader(MustUnderstand = true)]
    public string id;

    [MessageBodyMember(Order=1)]
    public string realMessage;   // Long string
}

我尝试通过提升值来更改app.config设置:

<bindings>
  <basicHttpBinding>
    <binding
      name="ws"
      transferMode="Streamed"
      messageEncoding="Mtom"
      maxReceivedMessageSize="10067108864">
      <readerQuotas
        maxDepth="32"
        maxStringContentLength="2147483647"
        maxArrayLength="2147483647"
        maxBytesPerRead="4096"
        maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

我应该改变其他任何价值吗?

2 个答案:

答案 0 :(得分:5)

您还需要在绑定上设置“maxBufferSize”和“maxBufferPoolSize”:

<bindings>
  <basicHttpBinding>
    <binding
      name="ws"
      transferMode="Streamed"
      messageEncoding="Mtom"
      maxReceivedMessageSize="10067108864"
      maxBufferSize="500000" maxBufferPoolSize="500000">
      <readerQuotas
        maxDepth="32"
        maxStringContentLength="2147483647"
        maxArrayLength="2147483647"
        maxBytesPerRead="4096"
        maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

在WCF的标准绑定中,这些也默认为64K。但是,既然你正在使用“transferMode = Streamed”,这真的不应该是一个问题 - 也许还有其他事情发生。如何提高sendTimeout设置?也许你的服务只是花了太长时间来回应。

马克

答案 1 :(得分:3)

请参阅basicHttpBinding @ http://msdn.microsoft.com/en-us/library/ms731361.aspx的maxReceivedMessageSize属性。 Coindicentally,默认值为65,536 KB。