文件上载,远程服务器返回错误:(413)请求实体太大

时间:2014-07-24 09:32:23

标签: c# asp.net wcf iis file-upload

当我通过WCF服务上传文件时,我收到了异常,"远程服务器返回错误:(413)请求实体太大"

关于此例外,有很多问题和答案。但是,他们都没有解决我的问题。

我使用的是Windows Web Server 2008 R2,IIS 7.5。我的客户端和WCF应用程序托管在IIS中。我正在使用频道来呼叫WCF服务。

        var binding = new BasicHttpBinding();

        binding.MaxReceivedMessageSize = Int32.MaxValue;
        binding.MaxBufferPoolSize = Int32.MaxValue;
        binding.MaxBufferSize = Int32.MaxValue;
        binding.ReaderQuotas.MaxStringContentLength = Int32.MaxValue;
        binding.ReaderQuotas.MaxArrayLength = Int32.MaxValue;
        binding.ReaderQuotas.MaxBytesPerRead = Int32.MaxValue;
        binding.ReaderQuotas.MaxDepth = Int32.MaxValue;
        binding.ReaderQuotas.MaxNameTableCharCount = Int32.MaxValue;

        var address = new EndpointAddress("WCF Service URL");

        return ChannelFactory<IFileService>.CreateChannel(binding, address);

WCF配置文件如下:

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behavior1">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="MyProject.WCF.FileService" behaviorConfiguration="behavior1">
        <endpoint binding="basicHttpBinding" bindingName="binding1" contract="MyProject.WCF.Contracts.Service.IFileService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="binding1" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

另外,我在客户端web.config文件中添加了以下配置:

<httpRuntime maxRequestLength="2097151" />

<serverRuntime uploadReadAheadSize="2147483647" />
<security>
    <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483648" />
    </requestFiltering>
</security> 

我更改了C:\ Windows \ System32 \ inetsrv \ config \ applicationHost.config,

<location path="My Site Path" overrideMode="Allow">
    <system.webServer>
        <httpLogging dontLog="true" />
        <serverRuntime uploadReadAheadSize="2147483647" />
    </system.webServer>
</location>

但是,他们都没有解决我的问题。 Windows Server 2012没有问题。可能问题与Windows Server 2008有关。如何在Windows Server 2008中使用WCF上传大文件?

感谢。

2 个答案:

答案 0 :(得分:1)

您可能需要更新System.WebServer部分中的IIS请求限制,默认值为30MB。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength="30000001" />
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>

此处提供更多信息:

http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits

您可以使用IIS中的配置编辑器执行此操作。

要访问此项,请在IIS管理器中选择“网站”,然后选择“管理”部分下的“配置编辑器”。深入查看requestLimits部分,您可以在那里更新配置,如下面的屏幕截图所示。请记住点击&#34;应用&#34;。这将更新应用程序根目录中的Web.Config。

根据您的部署过程,此更改可能会在下一版本中丢失,因此值得考虑更新源代码管理中的配置。

enter image description here

答案 1 :(得分:0)

我必须将它添加到 system.web 部分中的 web.config(注意:不是 system.webserver)

< httpRuntime maxRequestLength="100485760" requestValidationMode="2.0" maxQueryStringLength="18192" />