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

时间:2014-10-20 10:49:44

标签: c# xml web-services wcf web-config

请不要将此邮件删除为重复!!

我正在编写一个WCF服务,允许上传XML文件,以便将它们导入数据库。但是,当我上传64k默认值以上的文件时,我收到上述错误。

我已阅读此处已发布的有关此问题的所有问题并已实施但仍面临同样的问题。

我已经增加了配置文件中的所有绑定值(对于客户端和服务器)以接受最大2GB的大小。



    <binding name="BasicHttpBinding_BailiffServices"
                     maxBufferSize="2147483647"
                     maxBufferPoolSize="2147483647"
                     maxReceivedMessageSize="2147483647">
              <readerQuotas maxDepth="2147483647" 
                            maxStringContentLength="2147483647"
                            maxArrayLength="2147483647" 
                            maxBytesPerRead="2147483647"
                            maxNameTableCharCount="2147483647" />
              <security mode="None" />

以下是使用此绑定的WCF服务。



    <services>
          <service name="ClientService.ClientService">
            <endpoint address="http://subversion/BusinessTier.Services.ClientService.svc"
              binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_BailiffServices"
              name="BasicHttpBinding_IClient" contract="ClientService.IClient" />
          </service>
          <service name="DebtorService.DebtorService">
            <endpoint address="http://subversion/BusinessTier.Services.DebtorService.svc"
              binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_BailiffServices"
              name="BasicHttpBinding_IDebtor" contract="DebtorService.IDebtor" />
          </service>
        </services>

我还在配置中添加了设置,以确保IIS也能够处理大文件。



    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
        <security>
          <requestFiltering allowDoubleEscaping="true">
            <requestLimits maxAllowedContentLength="2147483647"/>
            <fileExtensions allowUnlisted="true"/>
            <verbs allowUnlisted="true"/>
          </requestFiltering>
        </security>
      </system.webServer>

据我所知,我已经修改了所有必要的设置,以允许我的WCF服务接受大文件,但到目前为止它们都没有。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

我找到了避免错误的解决方案,例如&#39;远程服务器返回了意外的响应:(413)请求实体太大。&#39; 在WCF服务配置中使用basicHttpBinding时只需要在Web.config中增加最大消息长度。您可以通过以下方式更新服务器web.config和客户端app.config文件,以便通过wcf发送大字节数组。

在Web.config中包含以下绑定和行为参数

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding maxReceivedMessageSize="2147483647" sendTimeout="00:10:00" receiveTimeout="00:10:00">
      <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647"/>
    </binding>
  </basicHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<protocolMapping>
  <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false">
  <serviceActivations>
    <add factory ="WebService.NInjectServiceHostFactory" relativeAddress="TestServic.svc" service="WebService.Services.ServiceManager"/>
  </serviceActivations>
</serviceHostingEnvironment>

我还在客户端app.config文件中添加了绑定配置。

<system.serviceModel>
<bindings>
<basicHttpBinding>
  <binding name="BasicHttpBinding_IServiceManager"  maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
    <security mode="None"/>
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
  </binding>
</basicHttpBinding>
</bindings>

<client>
<endpoint address="http://localhost:49359/ServiceManager.svc"
 binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IPackageManager"
 contract="PackageManager.IPackageManager" name="BasicHttpBinding_IPackageManager" />
</client>

</system.serviceModel>

这也将处理超时错误。

答案 1 :(得分:-1)

经过几个小时的搔痒,我终于成功地完成了这项工作。我从&lt; binding /&gt;中删除了绑定名称“BasicHttpBinding_BailiffServices”。元素和&lt; endpoint /&gt;元素。我在MSDN网站上偶然发现了这个解决方案。希望这有助于其他人。