HttpWebRequest - kann ich mehrere Anrufe bei der sametime von mehreren threads

Benutze ich HttpWebRequest erstellen Anfragen für Webseiten, als zu analysieren Sie.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);

dann, wenn mehrere threads rufen

HttpWebResponse response = (HttpWebResponse)request.GetResponse()

zur gleichen Zeit, sollte jeder seine eigene Antwort oder ist es möglich, für Faden 2, um die Antwort für thread7 zum Beispiel?

Obs: die Adresse ist die gleiche für alle threads, nur die POST-Parameter ändern

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

dies ist, wie ich mit der Methode:

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

Bitte sagen Sie mir, wo ich Fehler gemacht? Wie muss ich den code ändern? Bitte um Hilfe, ich kann nichts finden, was hilfreich auf dem web!

  • Erstellen Sie die Anfrage im gleichen thread, ist das empfangen der Antwort? Wenn ja, dann sollten Sie nicht haben ein problem mit dem Antworten immer Durcheinander. Können Sie aktualisieren Sie Ihre Frage etwas konkreter sein? Danke!
  • ja. GetPOSTWebsiteResponse Methode ist dabei sowohl httprequest und httpresponse. Yhis-Methode aufgerufen wird, die von jedem thread separatelly. Ich benutze keine anderen threads in irgendeiner Weise als diejenigen, die Sie sehen in dem Beispielcode. Hoffe, ich bin klarer, wenn nicht bitte Fragen
  • Welche version von .Netz verwenden Sie?
  • .Net framework 4
  • Sie sollten mit den async-Methoden eher als Laich-threads. Dies ist vor allem eine I/O-bound-Vorgang laichen threads ist nicht wirklich notwendig. Zweitens, es sei denn, Sie geändert haben, die DefaultConnection begrenzen, Sie sind nicht immer mehr als 2 threads zur gleichen Zeit, da der default-limit 2 pro Domäne und da wirst du die gleiche domain...
  • ja, aber mein code ist ein webservice in asp.net. Ich muss warten, bis die Anfrage empfangen wird. Wie kann ich das tun?
  • Das ist der Sinn von async I/O ist es nicht? Ich poste etwas code
  • Ich warte, wenn du kannst post-code! Vielen Dank für die Hilfe!
  • Ich habe geschrieben/update einige code für Sie in einer Antwort weiter unten

InformationsquelleAutor Ryan | 2011-02-19
Schreibe einen Kommentar