Webrequest teils sehr langsam

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von T1g0r.

    Webrequest teils sehr langsam

    Hallo, ich habe folgenden Code um mir Daten via php-Script von einer Onlinedatenbank zu holen:

    VB.NET-Quellcode

    1. ' Create a request for the URL.
    2. Dim request As WebRequest = WebRequest.Create(Adresse)
    3. ' If required by the server, set the credentials.
    4. request.Credentials = CredentialCache.DefaultCredentials
    5. MsgBox("1")
    6. ' Get the response.
    7. Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
    8. ' Display the status.
    9. MsgBox("2")
    10. Console.WriteLine(response.StatusDescription)
    11. ' Get the stream containing content returned by the server.
    12. Dim dataStream As Stream = response.GetResponseStream
    13. ' Get the Encoding
    14. Dim Encoding As System.Text.Encoding = System.Text.Encoding.Default
    15. ' Open the stream using a StreamReader for easy access.
    16. Dim reader As New StreamReader(dataStream, Encoding, True, 1024)
    17. ' Read the content.
    18. Dim responseFromServer As String = reader.ReadToEnd()
    19. ' Return the Complete HTML-String
    20. Return responseFromServer
    21. ' Cleanup the streams and the response.
    22. reader.Close()
    23. dataStream.Close()
    24. response.Close()


    Dies dauert beim ersten Aufrufen aber sehr lange. Die erste MsgBox (mit der 1 als ausgabe) bekomme ich sofort. Die zweite MsgBox bekomme ich teils erst 5-15 Sekunden danach.
    Rufe ich das den Code danach nochmal auf, bekomme ich beide MsgBox sofort angezeigt. Auch wenn ich das php-Script vom Browser aus aufrufe, bekomme ich sofort das angezeigt was ich zurückbekommen sollte.
    Es muss also an

    VB.NET-Quellcode

    1. Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
    liegen.
    Wie kann ich das verbessern?

    MfG T1g0r
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Also zum einen wieso WebRequest zum Abfragen und HttpWebResponse für die zurückgegebenen Daten? Also Casten (heißt das so?) von WebRequest zu HttpWebRequest. Arbeite doch gleich damit:

    VB.NET-Quellcode

    1. Dim myRequest As HttpWebRequest = HttpWebRequest.Create("url")
    2. myRequest.Method = "GET"
    3. myRequest.UserAgent = "Mein HttpUserAgent"
    4. myRequest.Accept = "Accept: application/xhtml+voice+xml;version=1.2, application/x-xhtml+voice+xml;version=1.2, text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1"
    5. myRequest.ContentType = "application/x-www-form-urlencoded"
    6. myRequest.Headers.Add(HttpRequestHeader.AcceptLanguage, "de-DE,de;q=0.9,en;q=0.8")
    7. myRequest.Headers.Add(HttpRequestHeader.AcceptCharset, "iso-8859-1, utf-8, utf-16, *;q=0.1")
    8. myRequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "deflate, gzip, x-gzip, identity, *;q=0")
    9. myRequest.CookieContainer = ToCookieContainer(cCookies)
    10. myRequest.KeepAlive = True
    11. myRequest.ServicePoint.Expect100Continue = False
    12. Dim myResponse As HttpWebResponse = myRequest.GetResponse
    13. Dim sReader As New StreamReader(myResponse.GetResponseStream())
    14. Dim sResultText As String = sReader.ReadToEnd()
    15. sReader.Close()
    16. myResponse.Close()
    17. myRequest.Close()
    18. Return sResultText


    Zudem solltest du die Streams wieder schließen bevor die Funktion verlassen wird. Also der Code stammt aus meinem HttpPostRequest und ich hatte noch nie Probleme damit.
    Ich würde mal die Messageboxen und Consolen dinger weglassen sondern nur den ResultText in einer Textbox ausgeben lassen. Du drückst den Button, der Request wird ausgeführt und dann siehst du ja wie lange es dauert bis der Text in der Textbox angezeigt wird.
    OK, dann versuche ich das mal.
    Hab mit dem Webreequest usw noch nicht viel am Hut, kenn mich daher noch nicht so gut aus.
    Hab die MsgBox nur reimgemacht um zu sehen, an welcher stelle es hängt.

    //EDIT

    Ich bekomme bei

    VB.NET-Quellcode

    1. myRequest.CookieContainer = ToCookieContainer(cCookies)
    den Fehler, das ToCookieContainer und cCookies nicht deklariert wurden.
    Außerdem kann myRequest nicht geschlossen werden, das .Close kein Member von HttpWebRequest ist.
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „T1g0r“ ()

    ööhm ja dis kannste weglassen wenn du keine Cookies verwendest, wie gesagt ich habe das aus einem Projekt von mir raus kopiert wo man sich wo einloggen kann direkt über POST und auch Text oder Dateien über POST übertragen kann, hierfür sind natürlich Cookies notwendig.

    ööhm ja habe falsch gedacht ^^ Request hat natürlich kein Close aber auf sowas kommst auch selber oder nicht?
    Wenn ich ein bisschen nachschaue ja :)

    Das dauert immer noch so ewig... An der Stelle:

    VB.NET-Quellcode

    1. Dim myResponse As HttpWebResponse = myRequest.GetResponse

    Kann das am Server liegen?
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Natürlich kann es daran liegen. Ich hatte bisher nie Probleme. Aber wenn dir nicht sicher bist, richte dir einen lokalen Server ein (xampp) und Test dein Code da. Mache ich auch immer, hier kannst du erstmal jegliche Fehlerquelle ausschließen. Wenn das Script funktioniert wirds aufn server geladen und im Code die Adresse geändert!
    Auf dem lokalen Server klappts wunderbar.
    Arg, da zahlt man schon so viel Geld...
    Was ich aber nicht verstehe, wenn ich das Script per Browser aufrufe, geht es ja auch ohne Probleme.
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Nunja wer weiß was der Server alles macht. Vielleicht liegt es am Header den du sendest, evtl muss der Server da erstmal nach den Spezifikationen suchen. Liegt es vielleicht am Browser Cache? Mal clearen und das Script nochmal aufrufen. Ich glaube nicht, dass man diese Verzögerung rausbekommt.
    Am Browser liegts nicht, das geht auch nach dem leeren schneller.
    Vielleicht weiß ja noch jemand anders Rat.
    Danke trotzdem.

    //EDIT
    Die ganze Zeit habe ich auf http://www.wintoolz.de... zugegriffen. (Dauer: 18 Sekunden)
    Nun habe ich ein wenig getestet.
    Lasse ich das www. weg, und greife nur auf http://wintoolz.de... zu, dauert der Zugriff nur 4 Sekunden.
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „T1g0r“ ()