Azure WCF服务上的maxReceivedMessageSize太小

本文关键字:maxReceivedMessageSize 太小 WCF 服务 Azure | 更新日期: 2023-09-27 17:59:38

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

"已超过传入邮件的最大邮件大小配额(65536)增加配额,在适当的绑定上使用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>

现在,许多文章都在讨论命名绑定,以及在服务器端的服务端点中设置绑定。类似这样的东西:

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

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

这还需要设置在哪里?

编辑:

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

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

对于我的整个配置文件:

<?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>

为什么没有采用新的绑定设置?

Azure WCF服务上的maxReceivedMessageSize太小

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

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

您的服务端Web.config中没有该节?如果您使用的是WCF 4.0,是否可能使用默认端点?

我不知道您是否可以为默认终结点指定绑定,但您可能希望尝试通过Web.config的部分指定终结点,并将bindingConfiguration设置为您的部分中指定的绑定。

相关文章:
  • 没有找到相关文章