gpt4 book ai didi

c# - Azure WCF 服务上的 maxReceivedMessageSize 太小

转载 作者:行者123 更新时间:2023-12-03 03:20:58 24 4
gpt4 key购买 nike

每当我连接客户端以将数据发送到 WCF Azure 服务时,我都会收到此错误:

“已超出传入消息的最大消息大小配额 (65536)。要 增加配额,在适当的绑定(bind)上使用 MaxReceivedMessageSize 属性 元素。”

我到处都读到了有关在客户端和服务器配置文件上设置此 MaxReceivedMessageSize 属性的信息。我已经做到了。

但是,每当我更新客户端中的服务引用时,它都会将设置拉回默认值 65536。(通过调查 .svcinfo 文件发现)

这让我得出结论,问题一定出在服务端。

我已将其放入我的 web.config 文件中:

<bindings>
<basicHttpBinding>
<!--The basicHttpBinding is used for clients which use the generated code to transmit data; the following settings make it possible to send larger amounts to the service-->
<binding maxReceivedMessageSize="10000000" receiveTimeout="01:00:00">
<readerQuotas maxStringContentLength="10000000" />
</binding>
</basicHttpBinding>
</bindings>

现在,许多帖子都讨论了命名绑定(bind)并将其设置在服务器端的服务端点中。像这样的事情:

<services>
<service name="YourNamespace.YourServiceClass">
<endpoint name="endpoint1"
address="http://server:8888/YourService.svc"
binding="basicHttpBinding"
bindingConfiguration="lageMessageTransfer"
contract="IYourServiceContract" />
</service>
</services>

但是,我没有这些服务端点,而且我的服务非常适合小规模。

还需要在哪里设置?

编辑:

更多信息,Tim 似乎在默认端点方面走在正确的轨道上。我正在使用默认端点。看来您不能只为该默认端点显式定义服务。或者如果你可以的话,我一定做错了。

但是,您似乎可以按照 Richard 的说明修改默认端点上的绑定(bind)。这是通过简单地不指定绑定(bind)的名称来完成的。我尝试将我的服务的值设置为低得多的值,以查看是否有其他因素降低了它们,但它们完全被忽略了。就好像默认端点只是忽略我创建的绑定(bind)。

对于我的整个配置文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
<listeners>
<add name="sdt" type="System.Diagnostics.XmlWriterTraceListener" initializeData="logging.e2e" />
</listeners>
</source>
</sources>
</system.diagnostics>
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding maxReceivedMessageSize="100" maxBufferSize="100" receiveTimeout="00:11:00">
<readerQuotas maxStringContentLength="100" />
</binding>
</basicHttpBinding>
</bindings>

<protocolMapping>
<add scheme="http" binding="basicHttpBinding" />
</protocolMapping>

<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="false" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
<connectionStrings><EDITEDOUT></connectionStrings>
</configuration>

思考为什么新的绑定(bind)设置没有被采用?

最佳答案

属性名称 maxReceivedMessageSize 非常明确 - 这完全取决于谁接收消息 - 如果您发送大量数据,那么它是服务,如果您从服务返回大量数据,那么它是服务这是客户。服务和客户端不需要此设置具有相同的值(与许多其他绑定(bind)设置不同)

设置未命名的绑定(bind)部分通常应该有效,因为在 .NET 4 中,它会为未使用 BindingConfiguration 显式指定配置的任何人配置绑定(bind)。但是,在上面的示例中,除了 maxReceivedMessageSize 之外,您还需要设置 maxBufferSize,因为您正在缓冲而不是流式传输消息。 maxBufferSize 和 maxReceivedMessageSize 必须相同

关于c# - Azure WCF 服务上的 maxReceivedMessageSize 太小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6380466/

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