多线程应用中第4次HttpWebRequest异常超时
本文关键字:HttpWebRequest 异常 超时 4次 应用 多线程 | 更新日期: 2023-09-27 18:19:11
我有一个多线程控制台应用程序作为服务器。每次有新客户端连接到TcpListener时,服务器都会生成一个新线程:
//code copied from http://www.switchonthecode.com/tutorials/csharp-tutorial-simple- threaded-tcp-server
//blocks until a client has connected to the server
TcpClient client = tcpListener.AcceptTcpClient();
//create a thread to handle communication with connected client
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
线程使用以下代码创建了多个httpwebrequest:
public static HttpWebResponse HttpGet(string pRequestURI, string pArgs)
{
string requestURI = string.Format("{0}?{1}", pRequestURI, pArgs);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestURI);
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
return response;
}
问题是,我在第四个请求上得到超时。这真的很奇怪,我掌握不了要领。在单线程应用程序中,代码工作得很好。我还确保使用:
关闭响应流response.Close();
requestURI是正确的,因为我尝试复制并粘贴它到我的浏览器。实际上,第四个请求是什么并不重要(我已经尝试过不同的请求),我总是得到一个超时。
我猜这可能是与线程限制有关的事情,但我真的不知道如何解决它。如有任何建议,不胜感激。
谢谢。
我花了很多心血、汗水和泪水,终于解决了这个问题。
这真的是一个愚蠢的错误,原来有一个地方我没有关闭请求。
由于某些(未知)原因,这不会影响从Web应用程序发出的请求,但是,当从控制台应用程序发出请求时,会遇到超时问题。
感谢@arx的帮助-非常感谢。
request.ServicePoint.CloseConnectionGroup(request.ConnectionGroupName);这行代码解决了我的问题由于