如何对maxBufferSize和maxReceivedMessageSize没有限制

时间:2013-09-23 09:23:48

标签: c# wcf

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

  

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

我把它增加到了

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

它工作正常。但我担心下次可能再次超过配额。

我可以无限制地设置此maxBufferSizemaxReceivedMessageSize吗?

提前感谢你

4 个答案:

答案 0 :(得分:3)

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

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

这足以满足您的需求吗?

答案 1 :(得分:3)

  

我可以设置此maxBufferSize和maxReceivedMessageSize没有限制   ?

不。你做不到。

将您的值设置为Max,如:

  maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"

MaxBufferSize的类型为int。因此,它可以支持的最大值是Int32.MaxValue(2147483647),以获得最大允许大小。 Int.MaxValue只有2 GB数据的一个字节)

另一方面,

MaxReceivedMessageSize的类型为longInt64,其支持的最大值为:9,223,372,036,854,775,807

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您使用动态使用此代码

,则应更改buffersize
 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>