当我通过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上传大文件?
感谢。
答案 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。
根据您的部署过程,此更改可能会在下一版本中丢失,因此值得考虑更新源代码管理中的配置。
答案 1 :(得分:0)
我必须将它添加到 system.web 部分中的 web.config(注意:不是 system.webserver)