Search code examples
c#multithreadinghttpwebrequesttcpclienttcplistener

Weird Timeout on 4th HttpWebRequest in Multi-Threaded Application


I have a multi-threaded console application acting as a server. The server spawns a new thread every time a new client connects to the 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);

The thread makes a number of HttpWebRequests using the following code:

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;
}

The problem is that, I get a timeout on the FOURTH REQUEST. It is really weird and I cannot get the hang of it. The code worked just fine when it was in a single-threaded application. I am also making sure to close the response stream using:

response.Close();

The requestURI is correct, 'cause I tried copying and pasting it into my browser. Actually, it doesn't matter what the 4th request is (I've tried with different ones), I always get a timeout.

I guess it may be something related to thread-limits, but I really don't know how to solve it. Any suggestions would be greatly appreciated.

Thank you.


Solution

  • After a lot of blood, sweat and tears, I managed to solve it.

    It was a stupid mistake really, turns out there was this one place where I was not closing the request.

    For some (unknown) reason, this does not affect the requests when made from a Web Application, but, when issuing the requests from a Console Application, timeout problems are encountered.

    Thank you @arx for your help - much appreciated.