WebRequest.GetResponse忽略了我的超时值?

时间:2012-05-14 21:00:58

标签: vb.net timeout webresponse

我正在尝试在WebRequest上设置接近无限的超时值,考虑到我正在查询的基于HTTP的API已经通过发回一个声明超时的XML文档来处理超时。但出于某种原因,以下代码仍会引发异常:

Dim request As WebRequest = WebRequest.Create("http://api/cgi-bin/do?cmd=longRunningOperation&timeout=300")
' ^ command returns timeout if not complete within 300 seconds (5 minutes)

request.Timeout = Integer.MaxValue ' so we don't need client-side timeout handling

Dim response As WebResponse = request.GetResponse() ' yet this call blows up

对不起,我无法提供可以调试的东西,但根据MSDN,这是怎么做的。然而,我在大约100秒后仍然收到WebException(消息:The operation has timed out,状态:WebExceptionStatus.Timeout)。

有人可以解释这种行为吗? (如果没有,建议解决方法?)

修改

问题可能与此片段在Task中执行的事实有关,但到目前为止,我仍然知道这一点。

EDIT2

在UI线程上运行代码仍然会抛出相同的异常,所以也许这毕竟不是......

EDIT3

经过一夜好眠,我认为这可能是因为我没有正确地关闭我的回应或响应流。我在长时间运行的操作仍在忙时发送多个请求。我可以想象,如果你没有在这里妥善处理,那么在较低的水平上会有一个问题。但对我来说很难说,因为我不知道webrequest / webresponse类的内部工作原理。

我正在使用的代码:http://code.google.com/p/dune-api-codepack/source/browse/ApiWrappers/DuneCommands/CommandResult.vb(不是最新提交,但差异不是太大)

有问题的方法是GetResults(command)。不介意GetResultsAsync方法,它只是一个草稿(虽然它可能包含相同的错误)。

EDIT4

忽略我所说的一切,问题和解决方案在我的答案中。

1 个答案:

答案 0 :(得分:0)

特别感谢@mellamokb试图与我一起解决问题,但解决方案实际上是你无法知道的。

在设置请求超时之前,我很愚蠢地将发布数据写入请求流。我想这就是你在累了的时候尝试编写代码所得到的。

再次感谢您的时间。