我正在使用.NET httpclient,但这可能是关于http的更一般的问题:我想允许用户从有时缓慢且不可靠的移动连接中上传大型文件。如果上传没有在20秒内开始,则可能存在一个连接问题,因此该应用程序应采取适当的措施(例如,现在放弃,然后再试一次。)但是,如果上传开始,可能需要几分钟才能完成。在这种情况下,我不希望超时打断它。然后,如果上传进度速度减慢爬网,我只想放弃并丢下错误。
所以我似乎想要两个超时条件 - 初始连接的20秒超时,以及10分钟(或者最好是动态计算的)超时时间。
有办法做到这一点吗?httpclient.TimeOut似乎在整个上传中设置了限制,而不仅仅是初始连接。
我正在使用httpclient.putasync(),并且我正在通过覆盖httpcontent.serializetostreamasync()来监视进度。如有必要,我只需在此功能中包括最低速度检查以终止进度太慢。
欢呼。
httpclient上的超时对您无用。据我所知,没有办法区分连接时间范围并发送请求正文。
您最好的选择是按照您的建议或使用PushStreamContent创建自己的派生的httpcontent。这将使您可以监视发送进度。
假设您的服务器未返回连接:关闭您可以使用打开TCP连接的HEAD请求点击服务器,然后您的第二个请求可以是PUT,并且将重新使用TCP连接。至少这样您知道服务器可用。