Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多线程应用程序中第四个HttpWebRequest出现奇怪超时_C#_Multithreading_Httpwebrequest_Tcpclient_Tcplistener - Fatal编程技术网

C# 多线程应用程序中第四个HttpWebRequest出现奇怪超时

C# 多线程应用程序中第四个HttpWebRequest出现奇怪超时,c#,multithreading,httpwebrequest,tcpclient,tcplistener,C#,Multithreading,Httpwebrequest,Tcpclient,Tcplistener,我有一个多线程控制台应用程序作为服务器。每次新客户端连接到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.Accept

我有一个多线程控制台应用程序作为服务器。每次新客户端连接到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);
线程使用以下代码发出大量HttpWebRequests:

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的帮助-非常感谢。

经过大量的血汗和眼泪,我终于解决了这个问题

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

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


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

request.ServicePoint.CloseConnectionGroup(request.connectiongroup名称); 这行代码解决了我的问题
谢谢

request.ServicePoint.CloseConnectionGroup(request.connectiongroup名称); 这行代码解决了我的问题
感谢

我想澄清一下:您只有一个客户端,这是服务器发出的第四个请求失败了吗?或者问题只出现在多个客户端上?@arx目前我只有一个客户端,一个ASP.NET web应用程序。最终,服务器将有更多的客户端,但目前我只有一个。这听起来不像是线程问题。您只有两个线程:主线程空闲等待另一个连接,服务线程没有任何其他线程可干扰。在发出web请求之间,您是否做了什么?您是在发出下一个请求之前关闭响应,还是将它们全部打开以便您可以一起处理它们?@arx实际上我有3个线程,因为侦听请求的不是主线程,而是从中生成的另一个侦听器线程。在提出另一个请求之前,我将关闭响应。事实上,我立即处理一个响应,然后关闭它。主线程在做什么吗?只是想澄清一下:您只有一个客户端,这是服务器发出的第四个请求失败了?或者问题只出现在多个客户端上?@arx目前我只有一个客户端,一个ASP.NET web应用程序。最终,服务器将有更多的客户端,但目前我只有一个。这听起来不像是线程问题。您只有两个线程:主线程空闲等待另一个连接,服务线程没有任何其他线程可干扰。在发出web请求之间,您是否做了什么?您是在发出下一个请求之前关闭响应,还是将它们全部打开以便您可以一起处理它们?@arx实际上我有3个线程,因为侦听请求的不是主线程,而是从中生成的另一个侦听器线程。在提出另一个请求之前,我将关闭响应。事实上,我立即处理一个响应,然后关闭它。主线程在做什么吗?对我来说,我必须使用
request.ServicePoint.CloseConnectionGroup(request.ConnectionGroupName)关闭整个连接组
对于我发出的每个请求,在得到响应后。对于我来说,我必须使用
request.ServicePoint.CloseConnectionGroup(request.ConnectionGroupName)关闭整个连接组对于我提出的每个请求,在得到响应后。