Laden...

WebClient sendet mit langer Verzögerung

Erstellt von R3turnz vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.381 Views
R
R3turnz Themenstarter:in
125 Beiträge seit 2016
vor 7 Jahren
WebClient sendet mit langer Verzögerung

Hallo,
ein WebClient sendet erst ca 15-20 Sekunden nach dem Aufruf der DownloadString Methode die Anfrage. Die Daten werden dann zwar empfangen, aber ich kann die Wartezeit nicht nachvollziehen. Es liegt nicht am Server, dieser antwortet sofort nachdem die Anfrage viel zu spät versendet wurde. Im Browser funktioniert auch alles ohne Verzögerung. Woran kann soetwas liegen?

16.840 Beiträge seit 2008
vor 7 Jahren

Normal ist das nicht.
Zeig bitte mal etwas Quellcode.

Zudem: wie hast Du geprüft, dass diese Verzögerung durch den WebClient kommt?

R
R3turnz Themenstarter:in
125 Beiträge seit 2016
vor 7 Jahren

Mir kam das ganze auch sehr komisch vor. Der Sourcecode ist überhaupt nichts besonderes:


readonly WebClient _client;
...
  protected bool Execute(Uri queryURI, out string queryResponse)
        {
            queryResponse = null;
            try
            {
                queryResponse = _client.DownloadString(queryURI);

                return true;
            }
            catch (WebException)
            {
                return false;
            }
       }

http://freegeoip.net/json/ wäre die Adresse die aufgerufen wird. Wie gesagt, bei Anfrage im Browser läuft alles ohne Verzögerung. Mit Wireshark und dem Debugger, ich hänge einfach mal ein Ergebnis an.

16.840 Beiträge seit 2008
vor 7 Jahren

Ich sehe hier jetzt keine Zeitverzögerung und auch programmatisch keinen Grund, wieso hier 20 Sekunden etwas nicht versucht zu verbinden.

Der default Timeout des WebClient ist 100 Sekunden; nicht 20.
Von daher kann man das auch etwas ausschließen.

    class Program
    {
        static void Main(string[] args)
        {

            var sw = Stopwatch.StartNew();

            var webClient = new WebClient();
            var json = webClient.DownloadString("http://freegeoip.net/json/ ");

            sw.Stop();

            Console.WriteLine($"Data in {sw.ElapsedMilliseconds} ms");
            Console.ReadKey();
       }
}

Geht einwandfrei und gibt bei mir aus:
Data in 132 ms

Das Problem wird dann tendenziell bei Dir an anderer Stelle sein; daher hatte ich gefragt, wie Du zum Schluss kamst, dass der WebClient schuld sei.
Anhand der Infos hier, ist das nämlich irgendwie nicht so ersichtlich.

Im Gegenteil: das Bild zeigt, dass die ganze Anfrage unter einer Sekunde abgearbeitet wird.

Kannst mal alles zeigen?

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

könnte auch daran liegen, dass Dein Programm nach einem Proxy sucht. Oder sind virtuelle Netzwerkkarten auf der Maschine im Spiel?
Schau mal in Winform application first web request is slow
Der Vorschlag dort, den Proxy auf null zu setzen, widerspricht allerdings der Doku, die sagt, dass man GlobalProxySelection.GetEmptyWebProxy() benutzen soll.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

R
R3turnz Themenstarter:in
125 Beiträge seit 2016
vor 7 Jahren

Ich habe den Proxy auf null und auf GlobalProxySelection.GetEmptyWebProxy() gesetzt, beidesmal hat sich nichts geändert. (Eine Warnung weist mich auf null hin, ist die Doku vieleicht veraltet?)
Ich habe hier zwei virtuelle Netzwerkkarten (VMware), habe beide deaktiviert, aber immer noch keine Änderung. Sind die das Problem?

16.840 Beiträge seit 2008
vor 7 Jahren

Dein Bild zeigt, dass die Verarbeitung wenige zehntel Millisekunden dauert.
Man kann die Karten ausschließen, wenn das Bild das vermeintliche Problem zeigt.

Willst jetzt Code zeigen oder nich?

Meinen Code getestet, ob es damit funktioniert?
Dafür hab ich ihn gepostet, Sinn: [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden

R
R3turnz Themenstarter:in
125 Beiträge seit 2016
vor 7 Jahren

Hallo,
ich hatte deinen Code bereits getestet, das Ergebniss waren 21 Sekunden. Von diesem Laptop aus, läuft alles ohne erstaunlicher Weise ohne Probleme. Das heißt es muss doch an den Karten liegen, da beide Computer im selben Netzwerk sind. Die letzte Frage ist nun, ist es möglich ohne eine Deinstallation den Fehler auf dem Rechner mit den virtuellen Adaptern zubeheben?

D
261 Beiträge seit 2015
vor 7 Jahren

Eventuell kommt die Verzögerungen vom Auflösen der Domain. Verwenden die Maschinen unterschiedliche DNS Server?