2010-03-23 4 views
6

Ich habe ein paar Webserver hinter einem Amazon EC2 Load Balancer. Ich verwende TCP-Balancing auf Port 80 (statt HTTP-Balancing).Wie kann ich Keep-Alive bei ASP.NET Web Service-Clientanforderungen deaktivieren?

Ich habe einen Client, der alle paar Sekunden einen Webdienst (der auf allen Webservern läuft) nach neuen Elementen fragt. Der Client scheint jedoch mit einem Server verbunden zu sein und fragt jedes Mal denselben Server ab.

Ich habe versucht mit ServicePointManager KeepAlive zu deaktivieren, aber das hat nichts geändert. Die ausgehende Verbindung hatte weiterhin den HTTP-Header "connection: keep-alive" und der Server hielt die TCP-Verbindung offen. Ich habe auch versucht, eine Überschreibung von GetWebRequest zu der von VS erzeugten Proxy-Klasse hinzuzufügen, die von SoapHttpClientProtocol erbt, aber ich sehe immer noch den Keep-Alive-Header.

Wenn ich den Prozess des Clients abbringe und neu starte, stellt er über den Load Balancer eine Verbindung mit einem neuen Server her, aber der neue Server wird weiterhin für immer abgefragt.

Gibt es eine Möglichkeit, die Verbindung jedes Mal mit einem zufälligen Server zu erzwingen? Ich möchte, dass die Last von dem einen Client auf alle Webserver verteilt wird.

Der Client wird (wie der Server) in C# geschrieben und verwendet eine Webreferenz (keine Dienstreferenz), die auf den Lastenausgleich verweist.

Antwort

9

Ist das nicht das Überschreiben der GetWebRequest Methode arbeiten:

protected override WebRequest GetWebRequest(Uri uri) 
{ 
    var webRequest = (HttpWebRequest)base.GetWebRequest(uri); 
    webRequest.KeepAlive = false; 
    return webRequest; 
} 
+0

Huh, mein Versuch GetWebRequest überschrieben hat nicht funktioniert, würde die Überschreibung genannt werden, aber Keep-Alive noch würde fertig. Ich habe deine Methode wörtlich kopiert, und es hat funktioniert! Nicht sicher, was ich anders gemacht habe, aber danke! –

+0

Vielleicht können Sie Ihre Methode posten, damit wir einen Blick darauf werfen können, was damit nicht stimmt. –

+0

könnte auch versuchen, ServicePointManager.SetTcpKeepAlive (false, 0, 0); –

Verwandte Themen