在没有听众通知的情况下,http(tcp)请求可能会丢失,这是有效的行为。看到这里的讨论: C# httpClient (block for async call) deadlock
问题 我们使用HttpClient.PostAsJsonAsync将Json文件上传到服务器。但是,在最坏的情况下,此上载可能需要几个小时。 这就是为什么只使用HttpClient.Timeout对我们不起作用。这是一个艰难的超时,我们需要拥有它。
那么当tcp连接消失且客户端没有检测到时,我们该怎么做。随着我们的超时,我们被困了很长时间。那么在这种情况下我们可以使用其他任何超时吗?还有其他想法或最佳做法吗? 我也在研究tcp套接字保持活力,但这似乎不是一个选择。
答案 0 :(得分:0)
经过一番研究,我终于找到了一篇描述该问题的文章并提供了一个解决方法: http://www.thomaslevesque.com/2014/01/14/tackling-timeout-issues-when-uploading-large-files-with-httpwebrequest/
根据这篇文章,HttpWebRequest存在一个我能够重现的设计缺陷。似乎很荒谬,超时也会影响上传。
但是,我可以使用提供的解决方法(WebRequestExtensions),因为我们的代码无论如何都是同步的。