2017-10-23 3 views
4

Ich erstelle eine App, die Informationen von einer Website erhält, diese Website gibt eine einzelne Textzeile mit den Daten zurück. Um das zu bekommen, verwende ich nur WebClient.DownloadString(). Dies ist der Code:Webclient langsam auf die erste Anfrage

{ 
     WebClient Client = new WebClient(); 
     Client.Proxy = null; 
     return Client.DownloadString(url); 
    } 

Das Problem ist, dass bei der ersten Anforderung dauert dieser Vorgang immer ~21.000ms, nimmt die Nächsten normale Mengen an Zeit. Es gibt ähnliche Fragen, und pepole scheint das Problem zu lösen, indem ich die Zeile Client.Proxy = null; hinzufüge, aber das behebt mein Problem nicht. Meine Proxy-Internet-Einstellungen sind deaktiviert, und die Firewall blockiert nichts (versuchte es zu deaktivieren).

Ich habe auch getestet mit verschiedenen Websites wie Google (um zu testen, es ist kein Serverproblem), aber die Ergebnisse sind die gleichen. Ich habe auch versucht, eine WebBrowser Kontrolle und HttpWebRequest, aber die Ergebnisse sind auch die gleichen.

Auf normalen Browsern (getestete Edge, Firefox und Chrome) dauert das Laden der gleichen Seite etwa 200ms mit Cache gelöscht.

Mit wireshark ich das habe, aber ich weiß nicht, wie es zu interpretieren:

mit Firefox:

TCP: 
1. SYN (client-server) 
2. SYN (client-server) 
3. SYN ACK (server-client) 
4. ACK (client-server) 
5. SYN ACK (server-client)  
6. ACK (client-server)  
HTTP: 
5. GET (client-server) 
TCP: 
7. ACK (server-client) 
HTTP: 
5. RESPONSE 200 OK (server-client) (The correct response is received) 
TCP: 
7. ACK (client server) 

Dann mit meinem Programm:

ich genau die gleiche Prozedur , aber das erste gesendete Paket über TCP verwendet IPv6-Adressen anstelle von IPv4, dann wartet es 21s und dann der Rest der Pakete, die eigentliche HTTP-GET-RESPONSE-Zeit ist kurz, wie es sein sollte.

+0

Wenn eine Verbindung zu einem HTTP-Server hergestellt wird, findet eine Verhandlung zwischen Client und Server unter Verwendung der HTTP-Header statt, um einen gemeinsamen Kommunikationsmodus zu erhalten. Zum Beispiel hat der Server standardmäßig Französisch eingestellt und der Client möchte Englisch. Der Server leitet dann die URL an eine andere Webseite weiter, was einige Zeit dauern kann. Bei der ersten Verbindung kann auch ein Cookie erstellt werden, und nachfolgende Verbindungen verwenden ein Cookie, so dass die Antwort, die das Cookie verwendet, schneller ist als die erste Verbindung ohne Cookie. – jdweng

Antwort

0

Problem gelöst es war Ipv6 die ganze Zeit. Anstatt die Anfrage an http://www.hostame.domian/file zu tun mache ich jetzt http://xxx.xxx.xxx.xxx/file, also geht es direkt an eine IPv4-Adresse.

Eine Art kurzlebige Frage, aber ich hoffe, es hilft, wenn jemand das gleiche Problem hat.

Verwandte Themen