Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF服务在第一次加载时响应413_C#_Asp.net_Wcf_Wcf Binding - Fatal编程技术网

C# WCF服务在第一次加载时响应413

C# WCF服务在第一次加载时响应413,c#,asp.net,wcf,wcf-binding,C#,Asp.net,Wcf,Wcf Binding,我有一个莫名其妙的问题,我找不到答案。我正在尝试将大量数据上载到WCF服务,在第一次和后续尝试中,它将返回413错误,直到在接受大量数据请求后发送64kb限制下的请求为止。 我已经在绑定中扩展了maxReceivedMessageSize和maxStringContentLength元素,这解决了在初始小请求之后发送请求时的问题(如果没有扩展这些元素,则返回不同的错误400,而不是413) 我的系统是在IIS 7上运行的ASP.NET 3.5应用程序,WCF服务使用自定义绑定、SOAP消息和客户

我有一个莫名其妙的问题,我找不到答案。我正在尝试将大量数据上载到WCF服务,在第一次和后续尝试中,它将返回413错误,直到在接受大量数据请求后发送64kb限制下的请求为止。 我已经在绑定中扩展了maxReceivedMessageSize和maxStringContentLength元素,这解决了在初始小请求之后发送请求时的问题(如果没有扩展这些元素,则返回不同的错误400,而不是413)

我的系统是在IIS 7上运行的ASP.NET 3.5应用程序,WCF服务使用自定义绑定、SOAP消息和客户端/服务器证书

基本上,复制顺序如下(在2台服务器上测试)

  • IIS7工作进程启动
  • 发送大于64kb的请求:返回413错误
  • 发送任何大于64kb的请求:返回413错误
  • 发送小于64kb的请求:返回200个有效的soap响应
  • 发送大于64kb的请求:返回200个有效soap响应
如果未增加maxReceivedMessageSize和maxStringContentLength元素,则会发生以下情况:

  • IIS7工作进程启动
  • 发送大于64kb的请求:返回413错误
  • 发送任何大于64kb的请求:返回413错误
  • 发送小于64kb的请求:返回200个有效的soap响应
  • 发送大于64kb的请求:返回400错误
调试表明,当收到413错误时,服务器并没有真正初始化我的服务,一旦收到一个小请求,它就会初始化,并注意我的绑定规则,然后允许大量数据

我怀疑这是WCF库中的一个问题,可以通过升级来解决,但这不是一个真正的选项,需要解决。我一直在考虑在应用程序启动时初始化所讨论的服务,如何或者可能以某种方式增加默认WCF最大接收字节数

从My web.config:

<system.web>
    <httpRuntime maxRequestLength="65536" executionTimeout="1800"/>
</system.web>
<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="67108864" />
        </requestFiltering>
    </security>
</system.webServer>
<system.serviceModel>
    <services>
        <service behaviorConfiguration="ServiceTlsBehavior" name="ELSLookupServiceTLS">
            <endpoint address="" binding="customBinding" bindingConfiguration="TlsBinding" contract="Lookup" />
        </service>
    </services>
    <bindings>
        <customBinding>
            <binding name="TlsBinding" closeTimeout="00:04:00" openTimeout="00:12:00" receiveTimeout="00:15:00" sendTimeout="00:05:00">

                <textMessageEncoding>
                    <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />
                </textMessageEncoding>
                <httpsTransport requireClientCertificate="true" maxReceivedMessageSize="6553600" maxBufferPoolSize="6553600" maxBufferSize="6553600" />
            </binding>
        </customBinding>
    </bindings>
    <behaviors>
        <serviceBehaviors>
           <behavior name="ServiceTlsBehavior">
                <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
                <dataContractSerializer maxItemsInObjectGraph="6553600"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
 </system.serviceModel>

好的,我发现了这个问题,为了便于参考,如果有人遇到这个问题,这里就是它:错误被重新分配到初始SSL流量和IIS,并且似乎与WCF无关(我可能在这方面错了)

必须增加IIS中的uploadReadAheadSize设置

在IIS7中,您可以在serverRuntime元素下的web.config中对其进行扩展,请参见:

在IIS6中,它也可能会弹出,显然是每个站点的IIS设置

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
public class ELSLookupService : Lookup
{
     //serivce call implemented here
}