自托管 WCF 服务中的 HTTP 413 请求实体太大
Posted
技术标签:
【中文标题】自托管 WCF 服务中的 HTTP 413 请求实体太大【英文标题】:HTTP 413 Request Entity Too Large In Self-Hosting WCF Service 【发布时间】:2012-09-11 13:59:31 【问题描述】:我有一个通过 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, Version=4.0.0.0, Culture=neutral
【问题讨论】:
启用WCF Tracing 以查看消息是否正在被 WCF 处理。该消息看起来像是来自 HTTP 主机组件,而不是 WCF 管道。 @SixtoSaez - 我已添加 WCF 跟踪日志信息。 【参考方案1】:正如我在问题中所避开的那样,这与绑定配置非常相关。特别是 maxReceivedMessageSize。
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"
这是需要更改的正确区域(可能不要让事情变得如此之大,因为这会使您可能容易受到拒绝服务攻击)。根据您的实际消息确定一个合理的值。
出站端点已正确配置,但入站端点未正确配置 - 它是:
<httpsTransport requireClientCertificate="true" />
这意味着它使用默认值65536
,这对于发送的消息来说是不够的。所以这确实是一个非常仔细检查端点的情况,特别是如果它们的名称相似。
【讨论】:
Steve 我知道您回答这个问题已经有一段时间了,但您能否详细说明出站与入站端点的含义?谢谢。 有点阴霾。感谢上帝提供轻量级 REST 服务,我已经有一段时间不用研究这种东西了。尽管如此,我的意思是“出站”=“服务”和“入站”=“调用者”(我想!)【参考方案2】:对我来说,它是 system.web 下的 maxRequestLength:
<system.web>
<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off"/>
<httpRuntime
maxRequestLength="2147483647"
executionTimeout="300" />
</system.web>
【讨论】:
以上是关于自托管 WCF 服务中的 HTTP 413 请求实体太大的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 WCF 自托管处理 Ajax JQUERY POST 请求
通过 HTTPS 对 WCF 自托管 REST 服务的 POST 请求示例
IIS 7.5 中的 WCF 服务托管 - 由于扩展配置,无法提供您请求的页面 [重复]