我正在使用.net HttpClient,但这可能是关于HTTP的更一般的问题: 我想允许用户上传大文件,有时是缓慢且不可靠的移动连接。 如果上传没有在20秒内开始,则可能存在连接问题,因此应用程序应采取适当的措施(例如现在放弃并稍后再试。) 但是如果上传开始,可能需要几分钟才能完成。在这种情况下,我不希望超时中断它。然后我只想放弃并在上传进度速度慢到爬行时抛出错误。
所以看起来我想要两个超时条件 - 初始连接超时20秒,上传完成超时10分钟(或最好动态计算)。
有办法做到这一点吗? HttpClient.Timeout似乎设置了整个上传的限制,而不仅仅是初始连接。
我正在使用HttpClient.PutAsync(),我正在通过重写HttpContent.SerializeToStreamAsync()来监视进度。如果有必要,我可以在此功能中包含最低速度检查,以便在进度太慢时终止。
干杯。
答案 0 :(得分:0)
HttpClient上的超时对你没用。据我所知,没有办法区分连接时间范围和发送请求体。
您最好的选择是按照建议创建自己的派生HttpContent,或者使用PushStreamContent。这样可以监控发送进度。
假设您的服务器没有返回连接:关闭您可以使用打开TCP连接的HEAD请求命中服务器,然后您的第二个请求可以是PUT,它将重新使用TCP连接。至少你知道服务器可用。