Multiple HTTP request in C#

Posted on

Problem :

I need to send about 200 HTTP requests in parallel to different servers and get response.
I use HttpWebRequest class in C#.
But I don’t see good time enhancement when requests are handled in parallel.
For example if one request needs 3sec to get response, 2 request in parallel – 6sec, 3 requests – 8 secs, 4 requests – 11sec …
It is not good, I hope that there should be best time, about 10 sec for 200 requests.
It looks like only 2-3 requests performs in parallel, but timeout starts immediately after WebRequest object creation.
I tried set DefaultConnectionLimit and MaxServicePoints values, but id didn’t help. As I understand these parameters for number of requests to one site in parallel. I need requests to different sites.

Code example that I use to test:

ArrayList a = new ArrayList(150);

for (i = 50; i < 250; i++ )
   a.Add("http://207.242.7." + i.ToString() + "/");

for (i = 0; i < a.Count; i++)
    Thread t = new Thread(new ParameterizedThreadStart(performRequest));

static void performRequest(object ip)
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create((stirng)ip);

      HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

–°an anyone ever encountered such a problem?
Thank you for any suggestions.

Solution :

Instead of starting up your own threads try using the asynchronous methods of HttpWebRequest such as HttpWebRequest.BeginGetResponse and HttpWebRequest.BeginGetRequestStream.

This might help –

Suggests there is a limit on the number of TCP connections allowed, but that you can increase the limit

Use asynchronous web requests in stead.


you can try this :

            List<Uri> uris = new List<Uri>();
            uris.Add(new Uri(""));
            uris.Add(new Uri(""));

            Parallel.ForEach(uris, u =>
               WebRequest webR = HttpWebRequest.Create(u);
               HttpWebResponse webResponse = webR.GetResponse() as HttpWebResponse;
        catch (AggregateException exc)
            exc.InnerExceptions.ToList().ForEach(e =>

This is the code of android application of sending the request. How can we use the upper code like:

params.add(new BasicNameValuePair("key", "value");
HttpPost request = new HttpPost();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("key", "value");// How can we give the value in this format format
post.setEntity(new UrlEncodedFormEntity(params));


Leave a Reply

Your email address will not be published. Required fields are marked *