gpt4 book ai didi

wcf - 由于 maxReceivedMessageSize 仍然是 65536,可怕的 WCF BAD 请求 400

转载 作者:行者123 更新时间:2023-12-04 14:16:32 24 4
gpt4 key购买 nike

上帝你不只是爱WCF。

我阅读了所有可能的线程,但我现在真的卡住了。

这是WCF配置:

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BaseHttp"
maxBufferSize="4194304"
maxBufferPoolSize="4194304"
maxReceivedMessageSize="4194304" />
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="TaskServiceBehavior">
<serviceMetadata httpGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="TaskServiceBehavior" name="TaskService">
<endpoint
address="http://www.mysite.com/TableTaskService/TableTaskService.svc"
binding="basicHttpBinding" bindingConfiguration="BaseHttp"
contract="TableTaskService.ITableTaskService" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://www.mysite.com/TableTaskService/" />
</baseAddresses>
</host>
</service>
</services>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://www.mysite.com/" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
</system.serviceModel>

现在我发送一条消息并抛出这个默认异常(在 svclog 文件中看到):

The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.



现在我明确声明它应该是4mb。

我的客户代码:
TableTaskServiceClient client = 
new TableTaskServiceClient(
new BasicHttpBinding { MaxBufferSize = 4194304,
MaxReceivedMessageSize = 4194304 },
new EndpointAddress(GetEndpointAddressString())
);

然而,它向我抛出了这个 65536 大小的错误。它是从哪里来的???

客户设置 MaxReceivedMessageSize 真的很重要吗?与服务器相同的值?我认为服务器负责确定长度而不是客户端是合乎逻辑的。

还有这个警告(注意它的说法有多大用处,即:没有关于被覆盖的元素的信息或者我遗漏了什么),也许 basichttpbinding 正是被覆盖的内容?但为什么会这样呢?反正:

[TraceRecord] Severity Warning TraceIdentifier http://msdn.microsoft.com/en-US/library/System.ServiceModel.OverridingDuplicateConfigurationKey.aspx Description The configuration system has detected a duplicate key in a different configuration scope and is overriding with the more recent value. AppDomain /LM/W3SVC/11/ROOT/TableTaskService-33-1296567 Source System.ServiceModel.Configuration.ServiceBehaviorElementCollection/-851144413 ElementName behavior OldElementLineNumber 0 NewElementLineNumber 0



更新:
重新配置了服务和客户端:
TableTaskServiceClient client = new TableTaskServiceClient(
new BasicHttpBinding {
MaxBufferSize = 4194304,
MaxReceivedMessageSize = 4194304,
MaxBufferPoolSize=4194304,
ReaderQuotas = new XmlDictionaryReaderQuotas
{
MaxArrayLength = 4194304,
MaxBytesPerRead = 4194304,
MaxDepth = 4194304,
MaxNameTableCharCount = 4194304,
MaxStringContentLength = 4194304
}
}, new EndpointAddress(GetEndpointAddressString()));

还是一样的错误。

如果有兴趣,我将发送一个长度为 467000~ 的 byte[] 数组

最佳答案

  • http://msdn.microsoft.com/en-us/library/ms731361.aspx
  • http://msdn.microsoft.com/en-us/library/ms731325.aspx
  • http://www.codeproject.com/Articles/151753/BlogFeedList.aspx?amid=Andrii-Vasylevskyi&display=Mobile

  • 尝试这个:
    <basicHttpBinding>
    <binding name="BaseHttp"
    maxBufferSize="4194304"
    maxBufferPoolSize="4194304"
    maxReceivedMessageSize="4194304">
    <readerQuotas maxArrayLength="4194304"
    maxBytesPerRead="4194304"
    maxDepth="4194304"
    maxNameTableCharCount="4194304"
    maxStringContentLength="4194304"
    />
    </binding>
    </basicHttpBinding>

    尽管其中一些设置没有意义,但我只是将它们设置为一个较大的值。

    此外,一旦你开始工作,我强烈建议你减少这些值,因为它们的存在是为了防止 DoS attacks在您的网站上。

    关于wcf - 由于 maxReceivedMessageSize 仍然是 65536,可怕的 WCF BAD 请求 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8112625/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com