2009-04-14 10 views
9

Wie behalte ich eine Verbindung in C# am Leben? Ich mache es nicht richtig. Soll ich ein HttpWebRequest-Objekt erstellen und es verwenden, um zu den URLs zu gelangen, die ich brauche? Ich sehe keine Möglichkeit, eine URL anders als die statische Methode HttpWebRequest.Create zu besuchen.Behalten Sie eine HTTP-Verbindung in C# am Leben?

Wie erstelle ich eine Verbindung, halte sie am Leben, stöbere mehrere Seiten/Medien auf der Seite und unterstütze Proxys? (Ich höre Proxy sind einfach und Unterstützung ist fast Standard?) -Edit- gute Antworten. Wie fordere ich eine 2. URL an?

{ 
HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create("http://google.com"); 
WebRequestObject.KeepAlive = true; 
//do stuff 
WebRequestObject.Something("http://www.google.com/intl/en_ALL/images/logo.gif"); 
} 

Antwort

19

Haben Sie versucht, die HttpWebRequest.KeepAlive Eigenschaft? Sie legt den entsprechenden Keep-Alive-HTTP-Header fest und behält die Verbindungen bei. (Natürlich muss dies auch vom Remote-Webserver unterstützt und aktiviert werden).

Die HttpWebRequest.KeepAlive Dokumentation auf MSDN besagt, dass es für HTTP1.1 Verbindungen zu wahr standardmäßig eingestellt ist, so vermute ich, den Server Sie versuchen, nicht zu kontaktieren Verbindung nicht Persistenz ermöglichen.

Der Proxy wird automatisch verwendet und seine Einstellungen werden von Ihren Systemeinstellungen (lesen Sie Internet Explorer) übernommen. Es ist auch möglich, die Proxy-Einstellungen über die Eigenschaft HttpWebRequest.Proxy zu überschreiben oder die Anwendungskonfigurationsdatei zu optimieren (siehe http://msdn.microsoft.com/en-us/library/kd3cf2ex.aspx).

8

Set HttpWebRequest.KeepAlive Eigenschaft Wahre .NET wird sich um den Rest kümmern. Es ist nur Datenbankverbindungspool. Funktioniert transparent.

Sie können neue Verbindung frei erstellen. .NET wird herausfinden, dass Sie einen bereits verbundenen Server verbinden und verwenden werden. Kommt auch auf Ihre Net.ServicePointManager.DefaultConnectionLimit Nummer wird es neue Verbindungen herstellen (, wenn Sie Mulithithreading tun).

+0

ich dies genau wahr sein nicht finden. .NET benötigt Hilfe beim Verwalten der Verbindungen durch Wiederverwendung einer HttpClient-Instanz. Ich arbeite jetzt an einem Problem, bei dem es Tausende etablierter unbenutzter Verbindungen gibt, weil Keep-Alive mit -1 Verbindungsleastzeitlimit verwendet wird und eine neue Instanz von HttpClient pro Anfrage verwendet wird. Dies kann jedoch nur ein Problem mit der neueren HttpClient-Klasse sein. –

1

Ich hatte ein ähnliches Problem, wenn HttpWebRequest.KeepAlive = True war nicht genug , um es am Leben zu halten. Die Verbindung blieb erst, nachdem ich gesetzt request.UnsafeAuthenticatedConnectionSharing = true und ServicePointManager.MaxServicePointIdleTime = 100000; // vermeiden 0 oder niedrige Werte

0

Wenn Sie mit Http 1.1 Sie sollten nicht Keep-Alive verwenden als die Verbindung ist implizit Keep-Alive.

Die Eigenschaft HttpWebRequest.KeepAlive kann festgelegt werden, aber wenn Sie eine Http 1.1-Anforderung senden, wird die Kopfzeile erst dann wirklich festgelegt, wenn Sie sie auf Schließen setzen.

Hier ist eine andere Frage, die weitere Informationen hat: is an HTTP/1.1 request implicitly keep-alive by default?

Verwandte Themen