【问题标题】:how to make no limit on maxBufferSize and maxReceivedMessageSize如何不限制 maxBufferSize 和 maxReceivedMessageSize
【发布时间】:2013-09-23 09:23:48
【问题描述】:

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

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

我已经加到了

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

它工作正常。不过我怕下次又超额了。

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

提前谢谢你

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

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

    不行。你不能那样做。

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

      maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
    

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

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

    【讨论】:

    • 4.5中,最大值为int64 msdn.microsoft.com/en-us/library/…
    • @Hoppe,它的Int64 用于.Net framework 3.0 和更高版本的MaxReceivedMessageSize,另一方面MaxBufferSize 在.Net framework 3.0 和更高版本中是int 类型。感谢您的评论,它使我编辑了答案中的错误。
    【解决方案2】:

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

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

    这足以满足您的需求吗?

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

         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>
        

        【讨论】:

          猜你喜欢
          • 2013-02-06
          • 2023-04-10
          • 2023-03-29
          • 2012-04-02
          • 1970-01-01
          • 2023-03-22
          • 1970-01-01
          • 2012-01-13
          • 1970-01-01
          相关资源
          最近更新 更多