Странное время ожидания 4-го запроса HttpWeb в многопоточном приложении - PullRequest
1 голос
/ 31 декабря 2011

У меня есть многопоточное консольное приложение, выполняющее роль сервера. Сервер порождает новый поток каждый раз, когда новый клиент подключается к 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);

Поток выполняет несколько запросов HttpWeb, используя следующий код:

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-й запрос (я пробовал с разными), у меня всегда тайм-аут.

Полагаю, это может быть связано с ограничением потоков, но я действительно не знаю, как это решить. Любые предложения будут с благодарностью.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 31 декабря 2011

После большого количества крови, пота и слез мне удалось ее решить.

Это была действительно глупая ошибка, оказывается, это было единственное место, где я не закрывал запрос .

По какой-то (неизвестной) причине это не влияет на запросы, сделанные из веб-приложения, но при отправке запросов из консольного приложения возникают проблемы с таймаутом.

Спасибо @arx за помощь - очень признателен.

1 голос
/ 16 октября 2014

request.ServicePoint.CloseConnectionGroup (request.ConnectionGroupName); Эта строка кода решила мою проблему Спасибо

...