我遇到第一个请求的问题,随后随着时间的推移,我的客户端正在运行超时,http超时设置为5秒。我有3个其他客户端在其他未失败的计算机上运行。这台机器是Windows XP,有点慢,但似乎这种情况发生得太频繁了。在这些情况下,服务器甚至不会接收连接尝试。下面的代码在一个带有monitor.wait的循环中运行,因此它每10秒轮询一次。我一开始以为我没有正确处理连接,但看起来我似乎是这样。我无法在这台机器上运行调试器(它不是我的机器),所以我很难找到问题。看起来客户端有时甚至太慢而无法打开连接。
try
{
Uri targetUri = new Uri(urlFormatted.ToString());
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
request.Method = "GET";
request.Timeout = 10000;
WriteInfo(this.GetType(), "Requesting URL: " + urlFormatted.ToString());
response = (HttpWebResponse)request.GetResponse();
break;
}
catch (System.Net.WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError)
{
response = (HttpWebResponse)ex.Response;
logger.Error("Http request failed with errorcode:" + (int)response.StatusCode);
}
logger.Error("Error connecting to [" + server + "]", ex);
if (ex.InnerException != null)
{
responseString = ex.InnerException.Message;
}
else
{
responseString = ex.ToString();
}
}
if (response != null)
{
try
{
//Response handling
}
catch (Exception ex)
{
//errorhandling
}
finally
{
response.Close();
response.Dispose();
}
}
有没有办法获得更多信息?似乎例外只是在说"操作已超时",这并没有给我很多东西。在我的调试机器上,我可以通过关闭我的服务器获得连接被拒绝的消息,但是没有这样的,服务器永远不会收到请求。
另请注意:其他机器都是Windows 7,而且更加强大。它们都安装了相同的.net库。
更多信息:
netstat -a 1 -n -p tcp
在尝试连接但获取操作超时消息时根本不显示连接。这看起来很怪异。它实际上并没有尝试连接。它确实显示它何时正确建立。