多线程应用中第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是正确的,因为我尝试复制并粘贴它到我的浏览器。实际上,第四个请求是什么并不重要(我已经尝试过不同的请求),我总是得到一个超时。

我猜这可能是与线程限制有关的事情,但我真的不知道如何解决它。如有任何建议,不胜感激。

谢谢。

多线程应用中第4次HttpWebRequest异常超时

我花了很多心血、汗水和泪水,终于解决了这个问题。

这真的是一个愚蠢的错误,原来有一个地方我没有关闭请求

由于某些(未知)原因,这不会影响从Web应用程序发出的请求,但是,当从控制台应用程序发出请求时,会遇到超时问题。

感谢@arx的帮助-非常感谢。

request.ServicePoint.CloseConnectionGroup(request.ConnectionGroupName);这行代码解决了我的问题由于