已超出传入邮件的最大邮件大小配额 (65536)

Posted

技术标签:

【中文标题】已超出传入邮件的最大邮件大小配额 (65536)【英文标题】:The maximum message size quota for incoming messages (65536) has been exceeded 【发布时间】:2011-07-24 12:01:03 【问题描述】:

我在为几个表创建范围时遇到了这个异常,所有这些表的设计都很庞大

<bindings>
    <wsHttpBinding>
        <binding name="wsHttpBinding_ISyncServices" closeTimeout="00:10:00"
            openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
            transactionFlow="false" hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
            <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
                maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                maxNameTableCharCount="2147483647" />
            <reliableSession ordered="true" inactivityTimeout="00:10:00"
                enabled="false" />
            <security mode="Message">
                <transport clientCredentialType="Windows"
                    proxyCredentialType="None" realm="">
                    <extendedProtectionPolicy policyEnforcement="Never" />
                </transport>
                <message clientCredentialType="Windows"
                    negotiateServiceCredential="true" algorithmSuite="Default" />
            </security>
        </binding>
    </wsHttpBinding>
</bindings>

我已将MaxReceivedMessageSize 转为 2147483647 但它仍然在这一行给了我以下例外

 client.GetTableDescription(scopeName, syncTable)

。 要增加配额,请在适当的绑定元素上使用 MaxReceivedMessageSize 属性。

【问题讨论】:

WCF - How to Increase Message Size Quota的可能重复 ***.com/questions/884235/… WCF - How to Increase Message Size Quota的可能重复 【参考方案1】:

根据this question's answer

你会想要这样的:

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

还请阅读 cmets 到那里接受的答案,那些包含有价值的输入。

【讨论】:

【参考方案2】:

如果您使用的是 CustomBinding,那么您宁愿需要在 httptransport 元素中进行更改。 设置为

 <customBinding>
    <binding ...>
     ...
     <httpsTransport maxReceivedMessageSize="2147483647"/>
    </binding>
 </customBinding>

【讨论】:

我希望我能投票给这个 100X。我想知道我的 WCF 配置浪费了多少小时。 是的,你也为我节省了大量时间 在解决这个错误两周后,我是另一个非常高兴的人。我们在 C# 中有一个 BizTalk WCF 自定义行为,需要使用此更新 binding-template.xml。【参考方案3】:

需要在SERVER和CLIENT上修改绑定配置(app.config文件中),否则不会生效。

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding maxReceivedMessageSize="2147483647 " max...=... />
        </basicHttpBinding>
       </bindings>
</system.serviceModel>

【讨论】:

但这是真的。我遇到了同样的问题,直到我更改了客户端上的设置。然后就OK了。 如果有人会遇到类似的问题。我已经在 WCF 上设置了所有内容,但我仍然收到错误消息。在客户端上,我在下面添加了代码,之后就可以了。非常感谢@CarrieKendall。 服务器端设置与代码相同:BasicHttpBinding bind01 = new BasicHttpBinding();bind01.Security.Mode = BasicHttpSecurityMode.None; bind01.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;bind01.MaxReceivedMessageSize = int.MaxValue; bind01.MaxBufferPoolSize = int.MaxValue;bind01.MaxBufferSize = int.MaxValue; bind01.ReaderQuotas.MaxDepth = 32;bind01.ReaderQuotas.MaxArrayLength = int.MaxValue; bind01.ReaderQuotas.MaxStringContentLength = int.MaxValue;bind01.ReceiveTimeout = new TimeSpan(0, 10, 0); 在客户端添加 maxReceivedMessageSize="2147483647 " 解决了我的问题。谢谢 我创建了一个简单的 web 服务,它返回大量的记录,并且得到了这个错误。我尝试在服务器上应用该解决方案,但没有奏效,所以我按照建议做了,并更改了 WCF 测试客户端的配置,然后就成功了。我没有笑,而是尝试了一下。只是一个想法【参考方案4】:

更新配置对我不起作用,但我能够以编程方式编辑绑定:

private YourAPIClient GetClient()

    Uri baseAddress = new Uri(APIURL);

    var binding = new BasicHttpBinding();
    binding.MaxReceivedMessageSize = 20000000;
    binding.MaxBufferSize = 20000000;
    binding.MaxBufferPoolSize = 20000000;
    binding.AllowCookies = true;

    var readerQuotas = new XmlDictionaryReaderQuotas();
    readerQuotas.MaxArrayLength = 20000000;
    readerQuotas.MaxStringContentLength = 20000000;
    readerQuotas.MaxDepth = 32;
    binding.ReaderQuotas = readerQuotas;

    if (baseAddress.Scheme.ToLower() == "https")
        binding.Security.Mode = BasicHttpSecurityMode.Transport;

    var client = new YourAPIClient(binding, new EndpointAddress(baseAddress));
    return client;

【讨论】:

您将此放置在 WCF 服务的哪个部分? @Malky.Kid 我创建了这个客户端来调用基于 .net 的肥皂网络服务。【参考方案5】:

您还需要增加maxBufferSize。另请注意,您可能需要增加readerQuotas。

【讨论】:

为什么 Visual Studio 将“maxBufferSize”标记为不允许?我有 VS 2010。 对于未来的访问者:maxBufferSize 必须匹配 maxReceivedMessageSize,否则可能会抛出错误。【参考方案6】:

这对我有用:

 Dim binding As New WebHttpBinding(WebHttpSecurityMode.Transport)
 binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None
 binding.MaxBufferSize = Integer.MaxValue
 binding.MaxReceivedMessageSize = Integer.MaxValue
 binding.MaxBufferPoolSize = Integer.MaxValue

【讨论】:

你把这个放在哪里了?上课吗?【参考方案7】:

我的解决方案是在我的查询中使用“-OutBuffer 2147483647”参数,这是通用参数的一部分。 PS C:> Get-Help about_CommonParameters -Full

【讨论】:

【参考方案8】:

对我来说,web.config / app.config 中的设置被忽略了。我最终手动创建了绑定,这为我解决了这个问题:

var httpBinding = new BasicHttpBinding()

    MaxBufferPoolSize = Int32.MaxValue,
    MaxBufferSize = Int32.MaxValue,
    MaxReceivedMessageSize = Int32.MaxValue,
    ReaderQuotas = new XmlDictionaryReaderQuotas()
    
        MaxArrayLength = 200000000,
        MaxDepth = 32,
        MaxStringContentLength = 200000000
    
;

【讨论】:

以上是关于已超出传入邮件的最大邮件大小配额 (65536)的主要内容,如果未能解决你的问题,请参考以下文章

WCF,已超出传入邮件的最大邮件大小配额 (65536)

WCF MaxReceivedMessageSize:超出最大邮件大小配额

超过 (65536) 时如何增加 WCF 服务的传入消息的最大消息大小配额

WCF 中的 MaxReceivedMessageSize 错误

WCF 服务 400 错误请求

WCF:如何设置 MaxReceivedMessageSize 配额