如何对 maxBufferSize 和 maxReceivedMessageSize 进行无限制

本文关键字:无限制 maxReceivedMessageSize maxBufferSize | 更新日期: 2023-09-27 18:32:20

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

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

我已将其增加到

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

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

我可以设置这个maxBufferSizemaxReceivedMessageSize没有限制吗?

提前谢谢你

如何对 maxBufferSize 和 maxReceivedMessageSize 进行无限制

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

不。你不能那样做。

将值设置为 Max,如下所示:

  maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"

最大缓冲区大小的类型为 int 。因此,它可以支持的最大值是 Int32.MaxValue (2147483647) 以利用最大允许大小。Int.MaxValue只比 2 GB 的数据少一个字节)

另一方面,MaxReceivedMessageSize 的类型为 longInt64,它支持的最大值为:9,223,372,036,854,775,807

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

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

这足以满足您的需求吗?

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

如果您

使用的是动态使用此代码,则应更改缓冲区大小

 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>