通过HTTPS将文件上载到Azure Web App时重置连接

时间:2016-07-12 08:03:18

标签: asp.net asp.net-mvc forms azure https

在我们正在开发的Azure托管的Web应用程序上,我们在上传文件时遇到了一个奇怪的问题,包括多部分表单数据和AJAX请求。间歇性地,并且没有我能辨别的真实模式,在上传文件时,浏览器报告连接已被重置,即服务器已终止连接。 Fiddler向我提供了最详细的错误消息:

HTTP/1.1 504 Fiddler - Send Failure

[Fiddler] SendRequest() failed: System.IO.IOException Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host. < An existing connection was forcibly closed by the remote host

仅在通过HTTPS运行时才会发生这种情况(整个站点设置为针对所有请求重定向到HTTPS)。如果我删除此重定向,我可以通过HTTP可靠地上传。

表单和AJAX请求由异步MVC控制器处理,它们访问发布数据中的任何HttpPostedFileBase对象上的流 - 然后将这些流上载到Azure Blob存储。虽然我不确定这些控制器是否甚至处理请求,但是在有效负载完全上传之前连接正在关闭?

有什么想法吗?真的把头发撕成了这个。

1 个答案:

答案 0 :(得分:0)

我发现(经过大量挖掘后)这是由于网络上的MTU设置不正确造成的;具体来说,我的FTTC的PPPoE连接的MTU为1492而不是预期的1500.不久之前,BT建议使用1492作为MTU,但此后发生了变化。稍微小一点的MTU导致传输中的数据包过多碎片,这更容易丢包(假设有更多的数据包丢失)。我的连接被远程服务器(Azure)重置的原因归结为数据包丢失 - 在多次尝试上传文件后,所有这些都因数据包丢失而失败,服务器已经足够并关闭了连接。

一个非常奇怪的问题,但我很乐意找到解决办法!