8

我有一个通过 HTTPS 接受消息的自托管 WCF 服务。

Java 应用程序正在发送一条消息,该应用程序接收响应:

HTTP/1.1 413 Request Entity Too Large
Content-Length: 0
Server: Microsoft-HTTPAPI/2.0
Date: Wed, 19 Sep 2012 09:05:34 GMT
Connection: close

我没有尝试上传文件,只是发送一个 78kb 的 XML/SOAP 消息。我尝试增加我的最大消息和缓冲区大小,但无济于事。

  <binding name="SecuredNoProxy" openTimeout="00:00:10" sendTimeout="00:00:10">
      <textMessageEncoding messageVersion="Soap11WSAddressing10" />
      <security includeTimestamp="true" enableUnsecuredResponse="true">
          <localClientSettings timestampValidityDuration="00:15:00" />
      </security>
      <httpsTransport manualAddressing="false" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" allowCookies="false" bypassProxyOnLocal="true" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard" keepAliveEnabled="true" realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" useDefaultWebProxy="false" requireClientCertificate="true" />
  </binding>

如果我可以提供任何其他信息,请告诉我。

WCF 跟踪日志

在连接“https://localhost”上接收字节

活动边界(开始)

连接信息

抛出异常(错误)

例外是:

System.ServiceModel.ProtocolException,System.ServiceModel,版本=4.0.0.0,文化=中性

4

2 回答 2

7

正如我在问题中所避开的那样,这与绑定配置非常相关。特别是 maxReceivedMessageSize。

maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"

这是需要更改的正确区域(可能不要让事情变得这么大,因为它会使您可能容易受到拒绝服务攻击)。根据您的实际消息确定一个合理的值。

出站端点已正确配置,但入站端点没有 - 它是:

<httpsTransport requireClientCertificate="true" />

这意味着它使用的是默认值65536,这对于发送的消息来说是不够的。所以这确实是一个非常仔细检查端点的情况,特别是如果它们的名称相似。

于 2012-09-19T13:19:19.853 回答
2

对我来说,它是 system.web 下的 maxRequestLength:

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <customErrors mode="Off"/>
    <httpRuntime
        maxRequestLength="2147483647"
        executionTimeout="300" />
</system.web>
于 2013-04-17T15:58:57.597 回答