У меня есть многопоточное консольное приложение, работающее как сервер. Сервер порождает новый поток каждый раз, когда новый клиент подключается к 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 правильный, потому что я пытался скопировать и вставить его в свой браузер. На самом деле, неважно, какой 4-й запрос (пробовал с разными), всегда получаю тайм-аут.
Я предполагаю, что это может быть связано с ограничениями потоков, но я действительно не знаю, как это решить. Любые предложения будут ценны.
Спасибо.