我正在尝试通过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>
我应该改变其他任何价值吗?
答案 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。