C#中的多个HTTP请求

我需要将大约200个HTTP请求并行发送到不同的服务器并获得响应。 我在C#中使用HttpWebRequest类。 但是,当并行处理请求时,我看不到好的时间增强。 例如,如果一个请求需要3秒来获得响应,2个请求并行 – 6秒,3个请求 – 8秒,4个请求 – 11秒……这不好,我希望应该有最好的时间,大约10秒200要求。 看起来只有2-3个请求并行执行,但是在创建WebRequest对象后立即启动超时。 我尝试设置DefaultConnectionLimitMaxServicePoints值,但id没有帮助。 据我了解这些参数对并行的一个站点的请求数。 我需要不同网站的请求。

我用来测试的代码示例:

 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)); t.Start(a[i]); } static void performRequest(object ip) { HttpWebRequest req = (HttpWebRequest)WebRequest.Create((stirng)ip); HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); } 

Сan有人遇到过这样的问题吗? 谢谢你的任何建议。

而不是启动自己的线程尝试使用HttpWebRequest的异步方法,如HttpWebRequest.BeginGetResponse和HttpWebRequest.BeginGetRequestStream 。

这可能会有所帮助 – http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/1f863f20-09f9-49a5-8eee-17a89b591007

建议允许的TCP连接数有限制,但可以增加限制

请使用异步Web请求。

编辑: http : //msdn.microsoft.com/en-us/library/86wf6409(VS.71).aspx

你可以试试这个:

 try { List uris = new List(); uris.Add(new Uri("http://www.google.fr")); uris.Add(new Uri("http://www.bing.com")); Parallel.ForEach(uris, u => { WebRequest webR = HttpWebRequest.Create(u); HttpWebResponse webResponse = webR.GetResponse() as HttpWebResponse; }); } catch (AggregateException exc) { exc.InnerExceptions.ToList().ForEach(e => { Console.WriteLine(e.Message); }); } 

这是发送请求的android应用程序的代码。 我们如何使用像params.add这样的上层代码(new BasicNameValuePair(“key”,“value”);

HttpPost request = new HttpPost();

List params = new ArrayList();

params.add(new BasicNameValuePair(“key”,“value”); //我们如何以这种格式格式给出值

post.setEntity(new UrlEncodedFormEntity(params));

httpClient.execute(请求);