我们有一个使用 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?这正常吗?是服务器上“请求实体太大”错误的原因,还是相反。还是只是巧合?无论哪种方式,效果都是我们必须在那时重新启动文件传输。有什么想法可能是错误的根本原因吗?
在此先感谢您的帮助。