我有一个ASP.NET(C#)4.0 WCF应用程序。我收到消息错误:
错误:已超出传入邮件的最大邮件大小限额(65536)。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性。
我把它增加到了
maxBufferSize="2097152" maxBufferPoolSize="524288" maxReceivedMessageSize="2097152"
它工作正常。但我担心下次可能会再次超过配额。
我可以设置这个maxBufferSize
和maxReceivedMessageSize
没有限制吗?
提前谢谢你
您无法将其设置为“无限制” - 无论如何,您将如何处理无限大的消息?
你可以设置的最大值是20亿(在.NET中为int.MaxValue
) - 相当于2 GB(2'147'483'648字节)的数据。
这足以满足您的需求吗?
我可以设置此maxBufferSize和maxReceivedMessageSize没有限制吗?
不,你不能这样做。
将您的值设置为Max,如:
maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
MaxBufferSize是int
类型。所以它可以支持的最大值是Int32.MaxValue(2147483647)以获得最大允许大小。 (Int.MaxValue
只有2 GB数据的一个字节)
另一方面,MaxReceivedMessageSize是long
或Int64
类型,它支持的最大值是:9,223,372,036,854,775,807
此外,如果您使用大量上传或下载来最大化缓冲区,请考虑使用流式传输作为替代方案。
如果您使用动态使用此代码,则应更改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>