2

我们有一个使用 http 绑定的应用程序,该绑定在客户端具有此配置:

    <binding name="SecureStreamedHttpBinding"
             transferMode="Streamed"
             maxReceivedMessageSize="8000000000"
             maxBufferSize="65536"
             sendTimeout="00:20:00">
      <security mode="Transport">
        <transport clientCredentialType="None" />
      </security>
    </binding>

而服务器端的这个配置:

    <binding name="SecureStreamedHttpBinding_IHub"
             transferMode="Streamed"
             maxReceivedMessageSize="8000000000"
             maxBufferSize="65536"
             receiveTimeout="00:20:00">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>

客户端通过创建 ChannelFactory 然后调用 CreateChannel 来打开通道:

               ChannelFactory<IHub> channelFactory = new ChannelFactory<IHub>(endpointConfigurationName);
           IHub hub = channelFactory.CreateChannel();
           ((IClientChannel)hub).Open();

有时,当我们尝试通过此连接传输大文件时,我们会从服务器收到错误消息:“远程服务器返回了意外响应:(413) 请求实体太大。” 我说有时是因为似乎有许多时间/速度因素会导致错误来来去去。例如,错误似乎在具有高带宽的机器上更为普遍。在建立连接后很好地开始时,它们似乎不太普遍。然而,时间/速度的影响是不一致的。

如果 TLS 关闭,我们永远不会有任何问题。

我们对连接进行了 Wire Sharked,发现客户端在错误发生的大约同一时间在端口上发送“FIN”消息,但我们不知道确切的 413 错误何时发生,因为我们没有看到它线鲨。所以,我们不知道这是因还是果。

我们还查看了来自 IIS 的 Failed Request Tracing 信息,发现“请求实体太大”与当时正在传输的数据一起列出,但我们不确定如何解释我们看到的内容。

我们不知道为什么客户端发出 FIN?这正常吗?是服务器上“请求实体太大”错误的原因,还是相反。还是只是巧合?无论哪种方式,效果都是我们必须在那时重新启动文件传输。有什么想法可能是错误的根本原因吗?

在此先感谢您的帮助。

4

1 回答 1

1

所以,自从我接触 WCF 以来已经有一段时间了,但我想我发现了一件可能的事情。您的问题可能不是 WCF,而可能是 IIS。在进行一些调查后,您可能会因为请求大小而遇到 SSL 证书问题。

This other SO answer is a good read,虽然它只部分涵盖了您的问题:

IIS7 - (413) 请求实体太大 | 上传ReadAheadSize

如果您遇到困难,可能值得一试为 IIS 框上的 SSL 启用客户端协商。从原始链接复制/粘贴代码以防万一出现故障:

错误消息中列出的原因之一是“Web 服务器无法为请求提供服务,因为它正在尝试协商客户端证书,但请求实体太大”。该问题的解决方案是设置 clientcertnegotiation=enable 的值。在 IIS 7 上设置此设置有点复杂。以下但通过命令提示符运行:

netsh http 显示 sslcert

注意 下一组命令将需要这些设置。

要删除当前设置(您不能更改现有设置,您必须删除并重新读取) netsh http delete sslcert :

IP 地址和端口从 show 命令结果中获取。示例:netsh http 删除 sslcert 0.0.0.0:443

正确添加证书设置: netsh http add sslcert ipport=: certash= appid= certstorename= clientcertnegotiation=enable

来源文章:

http://forums.newatlanta.com/messages.cfm?threadid=554611A2-E03F-43DB-92F996F4B6222BC0&#top

另外,看看增加你的上传预读大小: http ://www.iis.net/configreference/system.webserver/serverruntime

于 2016-03-29T21:40:48.580 回答