我有以下代码:
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冻结了。我怀疑悬挂与异常有很大关系,因为在实际挂起之前请求会在很多次之后发生。
答案 0 :(得分:1)
我的第一个倾向是你可能需要处置你的HttpWebResponse
。通常你可以将它包装在using
块中,但由于你有两个地方可能会分配webresponse
,你可能只想明确地处理它,就像这样。
webresponse.Close();
webresponse.Dispose();
我会从那里开始。
答案 1 :(得分:0)
只需在try块中添加以下内容:
while