HttpWebRequest.GetResponse()随机挂起

时间:2015-05-07 01:22:57

标签: c# http

我有以下代码:

webresponse = webrequest.GetResponse() as HttpWebResponse;

我有这个代码从不同的位置多次运行并随机(每隔几个小时),它挂在这一行:

webrequest.KeepAlive = false;

我尝试设置System.dll!System.Net.Sockets.Socket.Receive,但我继续收到错误。

我希望有任何可用的帮助来解决这个问题,提前谢谢。

编辑:我想补充说这段代码是从两个线程执行的。有时,它们可能连接到同一主机,但只能连接到这两个主机。此外,正如我所见,响应已适当关闭。

编辑2 :Visual Studio的调试器表示执行工作确实停留在// Get the response HttpWebResponse webresponse = null; try { webresponse = webrequest.GetResponse() as HttpWebResponse; } catch (WebException wex) { Console.WriteLine("Time : " + DateTime.Now); Console.WriteLine("Thread name : " + Thread.CurrentThread.Name); Console.WriteLine("Exception : " + wex); Console.WriteLine("Exc msg : " + wex.Message); Console.WriteLine("Url : " + request.GetFinalUrl()); if (request.IsBypassError) webresponse = wex.Response as HttpWebResponse; else { if (webresponse != null) { webresponse.Close(); webresponse.Dispose(); } throw; } }

编辑3 :为了确切了解导致错误的原因,我修改了"获取响应"上面的代码到

Time : 5/11/2015 3:13:35 AM 
Thread name : BOT A
Exception : System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
at System.Net.HttpWebRequest.GetResponse()
at Gameloop.Util.Web.QWebClient.Execute(QHttpRequest request) in e:\Visual Studio - Workspace\Gameloop.Util\Gameloop.Util\Web\QWebClient.cs:line 52 
Exc msg : The remote server returned an error: (500) Internal Server Error. 
Url : https://website1.com/url/path/to/something (I changed this)

我收到了这个输出:

CREATE EVENT do_things
  ON SCHEDULE
   EVERY 1 DAY
   STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 8 HOUR)
     DO
     UPDATE *update query to make your reset happen goes here*

这是唯一显示的错误,并且线程" BOT A"遇到了。但是,这不是线程似乎实际冻结的URL。 " BOT A"实际上是在网站2点的中午12点和#34; BOT B"实际上是在凌晨7点在website3.com冻结了。我怀疑悬挂与异常有很大关系,因为在实际挂起之前请求会在很多次之后发生。

2 个答案:

答案 0 :(得分:1)

我的第一个倾向是你可能需要处置你的HttpWebResponse。通常你可以将它包装在using块中,但由于你有两个地方可能会分配webresponse,你可能只想明确地处理它,就像这样。

webresponse.Close();
webresponse.Dispose();

我会从那里开始。

答案 1 :(得分:0)

只需在try块中添加以下内容:

while