2

我有一个 ASP.NET (C#) 4.0 WCF 应用程序。我收到消息错误:

错误:已超出传入邮件 (65536) 的最大邮件大小配额。要增加配额,请在适当的绑定元素上使用 MaxReceivedMessageSize 属性。

我已将其增加到

maxBufferSize="2097152" maxBufferPoolSize="524288" maxReceivedMessageSize="2097152"

它工作正常。但恐怕下一次可能又会超额了。

我可以设置这个maxBufferSize并且maxReceivedMessageSize没有限制吗?

提前谢谢你

4

4 回答 4

6

我可以无限制地设置这个 maxBufferSize 和 maxReceivedMessageSize 吗?

,你不能那样做。

将您的值设置为 Max,例如:

  maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"

MaxBufferSize的类型为int。所以它可以支持的最大值是Int32.MaxValue (2147483647) 以利用最大允许大小。Int.MaxValue仅比 2 GB 数据少一个字节)

另一方面,MaxReceivedMessageSizelong是or类型Int64,它支持的最大值是:9,223,372,036,854,775,807

于 2014-06-05T17:34:29.657 回答
5

您不能将其设置为“无限制”——无论如何,您将如何处理无限大的消息?

您可以将其设置为 20 亿(int.MaxValue在 .NET 中)的最大值 - 这对应于 2 GB(2'147'483'648 字节)的数据。

这足以满足您的需求吗?

于 2013-09-23T09:26:27.823 回答
0

此外,如果您通过大量上传或下载来最大化缓冲区,请考虑将流媒体作为替代方案。

于 2013-09-23T13:07:58.743 回答
0

如果您正在使用动态使用此代码,您应该更改缓冲区大小

 var binding = new BasicHttpBinding();
        binding.ProxyAddress = new Uri(string.Format("http://{0}:{1}", proxyAddress, proxyPort));
        binding.UseDefaultWebProxy = false;
        binding.Security.Mode = BasicHttpSecurityMode.Transport;
        binding.MaxReceivedMessageSize = Int32.MaxValue; //IMPORTANT
        binding.MaxBufferSize = Int32.MaxValue; //IMPORTANT
        binding.MaxBufferPoolSize = Int32.MaxValue;//IMPORTANT
        binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
        binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;

如果您使用的是 webconfig,请使用此代码

<bindings>
<basicHttpBinding>
    <binding name="basicHttp" allowCookies="true"
             maxReceivedMessageSize="20000000" 
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000">
        <readerQuotas maxDepth="32" 
             maxArrayLength="200000000"
             maxStringContentLength="200000000"/>
    </binding>
</basicHttpBinding>

于 2017-12-29T13:32:06.913 回答