Я использую HttpWebRequest для создания запросов к веб-страницам, а не для их анализа.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);
тогда, если несколько потоков одновременно вызывают
HttpWebResponse response = (HttpWebResponse)request.GetResponse()
, должен ли каждый из них получать собственный ответ или возможно ли, чтобы поток 2 получил ответ, например, для потока7?
Замечания: адрес один и тот же для всех потоков, меняются только параметры POST
public class CheckHelper
{
public string GetPOSTWebsiteResponse(string WebAddress, string year)
{
StringBuilder QuerryData = new StringBuilder();
String ResponseString;
QuerryData.Append("forYear"+ "=" + year);
#region build request
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(WebAddress);
// Set the Method property of the request to POST
request.Method = "POST";
NameValueCollection headers = request.Headers;
Type t = headers.GetType();
PropertyInfo p = t.GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.IgnoreCase | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy);
p.SetValue(headers, false, null);
byte[] byteArray = Encoding.UTF8.GetBytes(QuerryData.ToString());
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
#endregion
// Get the request stream.
using (Stream requestStream = request.GetRequestStream())
{
// Write the data to the request stream.
requestStream.Write(byteArray, 0, byteArray.Length);
// Close the Stream object.
}
#region get response
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
//Get the stream containing content returned by the server.
using (var responseStream = response.GetResponseStream())
{
// Open the stream using a StreamReader for easy access.
using (StreamReader responseReader = new StreamReader(responseStream))
{
// Read the content.
ResponseString = responseReader.ReadToEnd();
}
}
}
#endregion
return ResponseString;
}
}
вот как я использую метод:
Dictionary<int, Thread> threads=new Dictionary<int,Thread>();
foreach (var year in AvailableYears)
{
threads[year] = new Thread(delegate()
{
var client=new CheckHelper();
string response=client.GetPOSTWebsiteResponse("http://abc123.com", year.ToString())
//The thread for year 2003 may get the response for the year 2007
responsesDictionary[year]=response;
});
threads[year].Start();
}
//this is to force the main thread to wait until all responses are received:
foreach(var th in threads.Values){
th.Join(10000);
}
Подскажите, пожалуйста, где я ошибаюсь? Как мне изменить код? Пожалуйста, помогите, я не могу найти ничего полезного в сети!