【问题标题】:WCF Service failing - HTTP/1.1 400 Bad RequestWCF 服务失败 - HTTP/1.1 400 错误请求
【发布时间】:2014-09-09 14:23:13
【问题描述】:

我在调用我的 WCF 服务更大的请求 XML 对象内容长度 65708 时遇到异常,它在请求 XML 文件内容长度小于此长度时没有任何问题。

这是我们向外部客户端公开的服务,我使用 SoapUI 调试该服务,我收到异常 HTTP/1.1 400 Bad Request[\r][\n] 甚至没有到达调试点。我在网上搜索并应用了提供的配置值,但它们都没有帮助我解决问题。

所有配置更改后,我的 web.config 文件如下所示(仅绑定部分)。

    <bindings>
      <basicHttpBinding>
        <binding name="GDASHttp" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Mtom" textEncoding="utf-8" transferMode="Streamed" useDefaultWebProxy="true">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows"/>
          </security>
        </binding>
</basicHttpBinding>

我没有更改客户端文件中的任何设置,因为我可以从 SoapUI 获取异常并且问题仅与服务器配置有关。我确实了解某些设置根据文件大小接受的问题,但不确定我们可以在上述设置中提供的最大值是多少。

我根据 Google 在服务器中的一些建议修改了 IIS 设置,这是我更改后的 applicationhost.config 文件。

<location path="Default Web Site/GDAS.FY15R2.3.1/Trusted" overrideMode="Allow">
        <system.webServer>
            <handlers accessPolicy="Read, Execute" />
            <security>
                <ipSecurity>
                    <add ipAddress="127.0.0.1" subnetMask="255.255.255.255" allowed="true" />
                </ipSecurity>
                        <requestFiltering> 
                        <requestLimits maxAllowedContentLength="40000000" /> 
                        </requestFiltering> 
            </security>
            <serverRuntime uploadReadAheadSize="2147483647" />
        </system.webServer>
    </location>

【问题讨论】:

  • 值得注意的是,400 中的 HTTP 状态代码(即 400 错误请求)指向源自客户端而非服务器端的问题。服务器问题通常会产生 500 秒的状态代码。

标签: c#


【解决方案1】:

这是您将使用的值:2147483647

但是对于 WCF,您需要在客户端和服务器中都进行配置。您不能只更改服务器绑定,因为两个绑定基本上是握手,所以两个配置中的 MAX 值应该匹配。

我会打开追踪,看看到底发生了什么。

【讨论】:

  • 我不是 SoapUI 专家,但是当从 SoapUI 发送消息时,可能有一个可配置的长度。如果您的传出消息太大,我认为您会收到该错误。您还可以将 Fiddler 用于请求本身,并查看请求的实际大小。您实际上可能大于您正在配置的限制。如果是这种情况,您需要将结果集分解为多条消息。
  • 还有一个 400 错误,你甚至没有点击正确配置的服务器端点。 WCFStorm 可以帮助诊断 WCF 错误。我会重新检查您的整个服务器配置,然后使用该工具基于该工具生成一个新客户端,然后使用 SoapUI 或 WCF 风暴对其进行处理。
猜你喜欢
  • 2015-04-10
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 2011-05-31
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多