当在多个线程内使用时,HttpWebResponse会混淆

在我的应用程序中,我有一些线程将从Web服务获取数据。 基本上我只是打开一个URL并获得XML输出。 我有几个线程持续执行此操作,但具有不同的URL。 有时结果会混淆不清。 XML输出不属于线程的URL,而属于另一个线程的URL。

在每个线程中,我创建了类GetWebPage的实例,并从此实例调用方法Get。 该方法非常简单,主要基于MSDN文档中的代码。 (见下文。我在这里删除了我的error handling!)

public string Get(string userAgent, string url, string user, string pass, int timeout, int readwriteTimeout, WebHeaderCollection whc) { string buffer = string.Empty; HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(url); if (!string.IsNullOrEmpty(userAgent)) myWebRequest.UserAgent = userAgent; myWebRequest.Timeout = timeout; myWebRequest.ReadWriteTimeout = readwriteTimeout; myWebRequest.Credentials = new NetworkCredential(user, pass); string[] headers = whc.AllKeys; foreach (string s in headers) { myWebRequest.Headers.Add(s, whc.Get(s)); } using (HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse()) { using (Stream ReceiveStream = myWebResponse.GetResponseStream()) { Encoding encode = Encoding.GetEncoding("utf-8"); StreamReader readStream = new StreamReader(ReceiveStream, encode); // Read 1024 characters at a time. Char[] read = new Char[1024]; int count = readStream.Read(read, 0, 1024); int break_counter = 0; while (count > 0 && break_counter < 10000) { String str = new String(read, 0, count); buffer += str; count = readStream.Read(read, 0, 1024); break_counter++; } } } return buffer; 

如您所见,我没有公共属性或任何其他共享资源。 至少我没有看到任何。 url是我在互联网上调用的服务, 缓冲区是来自服务器的XML输出。 就像我说的,我在几个线程(10到12)中有这个类/方法的多个实例,有时缓冲区不属于同一个线程的url而是另一个线程。

编辑

我补充道

 System.Net.ServicePointManager.DefaultConnectionLimit = 25; 

而且现在它的程序在很长一段时间内都能正常运行。

您的方法完全是线程安全的。

您可能在调用该方法的代码中遇到问题。