远程服务器返回错误:(413)请求实体太大。 WCF

时间:2017-01-31 17:29:49

标签: wcf

我正在调用WCF服务,我正在尝试上传图片。但是,当它到达WCF服务时,它会出现此错误:

远程服务器返回错误:(413)请求实体太大。

对WCF服务的跟踪说:

System.ServiceModel.ProtocolException:已超出传入邮件的最大邮件大小限额(65536)。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性。

所以,读起来,我觉得很容易。只需更改设置即可离开。但事实并非如此。我已通过"编辑WCF设置"编辑了绑定。 Visual Studio中的GUI。它修改了web.confg,如下所示:

<system.serviceModel>
    <services>
      <service behaviorConfiguration="debugMode" name="Portal.Service" />
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="debugMode">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_Portal" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="01:50:00" openTimeout="01:50:00" sendTimeout="01:50:00" receiveTimeout="01:50:00" >
          <readerQuotas maxDepth="128" maxStringContentLength="8388608" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

然而错误仍然存​​在?问题肯定是WCF服务,因为我在服务跟踪日志中看到了异常。调用客户端(ASP.Net)将其称为&#34;远程服务器&#34;。

我在客户端web.config上也有这些设置:

<bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_Portal"  maxReceivedMessageSize="2147483647" 
                 maxBufferSize="2147483647"
                 maxBufferPoolSize="2147483647"  />
      </basicHttpBinding>
    </bindings>

在IIS中,我也设置了 uploadReadAhead 大小。我现在该做什么都不知所措。绑定匹配,通过GUI更改设置。它还想要什么?

1 个答案:

答案 0 :(得分:2)

您更改了绑定的配置,但我在服务的配置文件中找不到您实际使用绑定的任何位置(&#34; BasicHttpBinding_Portal&#34 ;)

你可以做两件事之一。通过bindingConfiguration标记的<service>属性将该绑定分配给显式端点,或者通过省略basicHttpBinding属性将您设置的配置设置为name的默认值在<binding>标记上。由于您没有定义明确的端点,我建议采用第二种方法:

<bindings>
  <basicHttpBinding>
    <binding maxReceivedMessageSize="2147483647" 
             maxBufferSize="2147483647"
             maxBufferPoolSize="2147483647"  />
  </basicHttpBinding>
</bindings>

这里的关键点是您必须告诉服务使用您指定的绑定。如果您不这样做,将使用绑定的默认值。通过省略绑定配置的name属性,您可以告诉框架将该配置用于任何basicHttpBinding个请求。