Asp.net 使用IIS7上的WCF服务上载大文件时出现错误413`

Asp.net 使用IIS7上的WCF服务上载大文件时出现错误413`,asp.net,asp.net-mvc,wcf,iis-7,Asp.net,Asp.net Mvc,Wcf,Iis 7,我有一个web应用程序,允许用户上传文件。然后使用另一个服务上的WCF服务保存文件。在我上传一个大约4.5MB的文件之前,这种上传效果很好。当我上传一个超过一定大小的文件时,我会得到以下错误: Soap错误:413服务器拒绝处理请求,因为请求实体比服务器愿意或能够处理的大 此错误出现在运行WCF服务的服务器的系统事件日志中 我找到的解决方案告诉我更改applicationHost配置文件中的maxAllowedContentLength和uploadReadAheadSize设置。但是,如果我将

我有一个web应用程序,允许用户上传文件。然后使用另一个服务上的WCF服务保存文件。在我上传一个大约4.5MB的文件之前,这种上传效果很好。当我上传一个超过一定大小的文件时,我会得到以下错误:

Soap错误:413服务器拒绝处理请求,因为请求实体比服务器愿意或能够处理的大

此错误出现在运行WCF服务的服务器的系统事件日志中

我找到的解决方案告诉我更改applicationHost配置文件中的maxAllowedContentLength和uploadReadAheadSize设置。但是,如果我将maxAllowedContentLength设置为非常小的值,那么将maxAllowedContentLength更改为只会产生不同的错误,而更改uploadReadAheadSize值对问题没有任何影响。有人知道我必须改变什么,我必须在哪里改变吗?我已经找了好几个小时了,我开始不耐烦了。谢谢你的帮助

编辑:

好的,位于生产系统上的中的WCF服务的web.config如下所示。这是位于WCF web服务的IIS站点指向的文件夹中的web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <handlers>
        <add name="SOAP" path="*.wsdl" verb="*" modules="IsapiModule" scriptProcessor="C:\Program Files (x86)\Common Files\MSSoap\Binaries\SOAPIS30.dll" resourceType="Unspecified" preCondition="bitness32" />
        <add name="WSDL Mapping" path="*.wsdl" verb="*" modules="IsapiModule" scriptProcessor="C:\Program Files\Common Files\MSSoap\Binaries\SOAPIS30.dll" resourceType="Unspecified" />
    </handlers>
</system.webServer>
</configuration>
测试系统的配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <handlers>
        <add name="WSDL Mapping" path="*.wsdl" verb="*" modules="IsapiModule" scriptProcessor="C:\Program Files\Common Files\MSSoap\Binaries\SOAPIS30.dll" resourceType="Unspecified" />
    </handlers>
</system.webServer>
</configuration>
正如您所看到的,在任何一个文件中都没有提到任何内容长度或任何内容。我必须承认,在这一点上我很困惑。但正如我所说的,我不是这方面的专家

编辑2:

以下是我的web应用程序的web.config的serviceModel节点:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="WsJobsSoapBinding" closeTimeout="00:05:00" openTimeout="00:05:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
                    <message clientCredentialType="UserName" algorithmSuite="Default"/>
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://srvts01test:90/WsJobs.WSDL" binding="basicHttpBinding" bindingConfiguration="WsJobsSoapBinding" contract="JobsWs.WsJobsSoapPort" name="WsJobsSoapPort"/>
    </client>
</system.serviceModel>

这是调用WCF服务的web应用程序的web.config,而不是WCF服务本身的web.config。再次感谢您的帮助:

您想更改MaxReceivedMessageSize

我想当我这样做时,我还必须将MaxBufferPoolSize更改为相同的值

您可以通过配置或类似这样的代码来完成

            binding.MaxBufferPoolSize = 67108864;
            binding.MaxReceivedMessageSize = 67108864;

您想更改MaxReceivedMessageSize

我想当我这样做时,我还必须将MaxBufferPoolSize更改为相同的值

您可以通过配置或类似这样的代码来完成

            binding.MaxBufferPoolSize = 67108864;
            binding.MaxReceivedMessageSize = 67108864;

我发现一篇文章谈到了你在聊天中提到的45KB大小限制。它包括所做的配置更改


您的测试环境可能已经进行了这些更改,因此这是需要寻找/考虑的一件事。人们有时不会在部署期间覆盖配置文件,因此您可能有一个旧文件可以正常工作。

我发现一篇文章讨论了您在聊天中提到的45KB大小限制。它包括所做的配置更改


您的测试环境可能已经进行了这些更改,因此这是需要寻找/考虑的一件事。在部署过程中,人们有时不会覆盖配置文件,因此您可能有一个旧文件可以正常工作。

在.Net 4.5下运行的WCF服务中,我也遇到了这些413个错误

解决办法很简单

以前,my web.config包含以下内容:

  <services>
    <service name="PocketCRMServices.Service1">
      <endpoint address="../Service1.svc"
        binding="webHttpBinding"
        contract="PocketCRMServices.IService1"
        behaviorConfiguration="webBehaviour" />
    </service>
  </services>

就是这样。

我的WCF服务在.NET4.5下运行时也出现了413个错误

解决办法很简单

以前,my web.config包含以下内容:

  <services>
    <service name="PocketCRMServices.Service1">
      <endpoint address="../Service1.svc"
        binding="webHttpBinding"
        contract="PocketCRMServices.IService1"
        behaviorConfiguration="webBehaviour" />
    </service>
  </services>

就这样。

这家酒店到底在哪里?在applicationHost配置中?谢谢你的反馈:你能告诉我这个出现的背景吗?它是否位于配置文件的standardEndpoint节点内?如果是,在哪个配置文件中?我为我的无知道歉,但我对IIS还很陌生。我在web应用程序的web.config中找到了这些属性。web应用程序使用位于另一台服务器上的WCF服务保存文件,当它尝试使用WCF服务保存文件时,承载WCF服务的计算机上会发生413错误。我忘了提到,我们有一个版本运行在一个测试系统上,它至少具有相同的web应用程序配置,并且在那里工作。由于某种原因,它无法在生产服务器上运行。。。因此,我不认为在web应用程序的web.config中更改任何内容都能解决问题;我得再考虑一下。它将位于WCF服务本身的端点配置中。你能在主要问题中显示配置吗?您是自托管WCF服务还是使用IIS?当WCF服务器抛出413时,网站上会发生什么行为?你发现那边有错误吗?这个属性到底在哪里?在applicationHost配置中?谢谢你的反馈:你能告诉我这个出现的背景吗?它是否位于配置文件的standardEndpoint节点内?如果是,在哪个配置文件中?我为我的无知道歉,但我对IIS还很陌生。我在web应用程序的web.config中找到了这些属性。web应用程序使用WC
F服务位于另一台服务器上以保存文件,当它尝试使用WCF服务保存文件时,承载WCF服务的计算机上会发生413错误。我忘了提到,我们有一个版本运行在一个测试系统上,它至少具有相同的web应用程序配置,并且在那里工作。由于某种原因,它无法在生产服务器上运行。。。因此,我不认为在web应用程序的web.config中更改任何内容都能解决问题;我得再考虑一下。它将位于WCF服务本身的端点配置中。你能在主要问题中显示配置吗?您是自托管WCF服务还是使用IIS?当WCF服务器抛出413时,网站上会发生什么行为?你发现那边有什么错误吗?谢谢你,Shane!我去看看!最后我自己写了一个新的WCF服务。问题似乎出在肥皂上。新的WCF服务现在运行良好:。再次感谢你的帮助。谢谢你,谢恩!我去看看!最后我自己写了一个新的WCF服务。问题似乎出在肥皂上。新的WCF服务现在运行良好:。再次感谢你的帮助。