2008-10-09 8 views
5

Ist es möglich, WCF mit einer benutzerdefinierten Proxy-Adresse und benutzerdefinierten Anmeldeinformationen zur Verfügung zu stellen?WCF Benutzerdefinierte HTTP-Proxy-Authentifizierung

Ich habe diese Antwort auf stackoverflow gefunden: How to set proxy with credentials to generated WCF client?, aber ich habe eine Komplikation, der Dienst, gegen den ich mich authentifiziere, verwendet seine eigene Authentifizierung, also muss ich zwei Sätze von Anmeldeinformationen verwenden durch den Proxy und die andere, um sich gegen den Dienst zu authentifizieren)

Ich verwende die Technik, die in den Antworten auf die andere Frage beschrieben wird, um die Dienstanmeldeinformationen bereitzustellen. z.B.

client.ClientCredentials.UserName.UserName = username; 
client.ClientCredentials.UserName.Password = password; 

ich die Adresse des Proxy einstellen kann so etwas wie dies mit:

(client.Endpoint.Binding as WSHttpBinding).ProxyAddress = ...; 

Wie kann ich das, was effektiv zwei Sätze von Anmeldeinformationen ist? (Hinweis: Die Anmeldeinformationen für den Proxy und den tatsächlichen Dienst sind unterschiedlich!) Beachten Sie auch, dass die Proxy-Details nicht unbedingt die Standard-System-Proxy-Details sind.

Antwort

13

Wenn Sie die WebRequest.DefaultWebProxy Eigenschaft auf einen neuen WebProxy mit Anmeldeinformationen gesetzt ist, wird WCF es verwenden, für alle HTTP-Anfragen, die es macht. (Dies wird alle HttpWebRequests beeinflussen durch die Anwendung verwendet, wenn nicht ausdrücklich außer Kraft gesetzt).

// get this information from the user/config file/etc. 
Uri proxyAddress; 
string userName; 
string password; 

// set this before any web requests or WCF calls 
WebRequest.DefaultWebProxy = new WebProxy(proxyAddress) 
{ 
    Credentials = new NetworkCredential(userName, password), 
}; 

Mein blog post on proxy servers weitere Details enthält.

+0

ich einen Dienst am raubend. Der Dienst wird mit Benutzername und Kennwort authentifiziert. Wie können wir die Proxy-Adresse und Anmeldeinformationen erhalten? – Lijo

+0

Ich bekomme 502 Bad Gateway http://stackoverflow.com/questions/10807134/azure-service-bus-relay-502-bad-gateway-after-service-restart wenn ich Standard-Proxy wie in erwähnt verwendet http://social.msdn.microsoft.com/Foren/de-DE/wcf/thread/5f8d2c3a-164f-411a-b387-91f0be51f190/ – Lijo

+0

Ich habe dies als Grundlage für unser Problem verwendet, wo wir eine Proxy-Ausschlussregel haben, um den Zugriff auf unseren Endpunkt ohne Anmeldeinformationen, aber unseren Endpunkt zu ermöglichen hat einen benutzerdefinierten Validator, so dass WCF versuchte, die Anmeldeinformationen der Nachricht auch für den Proxy zu verwenden. Meine Lösung bestand darin, 'Credentials = new NetworkCredential (Benutzername, Passwort)' durch 'UseDefaultCredentials = true' zu ​​ersetzen. Dies führt dazu, dass WCF keine Anmeldeinformationen an den Proxy weitergibt und den Benutzernamen/das Passwort in der Message weitergibt. Genial! Vielen Dank! – Shevek

2

Die Client-Anmeldeinformationen Sie Einstellung sind, um gut zu Ihren Diensten zu authentifizieren.
Für die Proxy-Authentifizierung müssen Sie HttpTransportSecurity.ProxyCredentials verwenden. Dieser Link können Sie

helfen.

http://msdn.microsoft.com/en-us/library/system.servicemodel.httptransportsecurity.proxycredentialtype.aspx

+0

Ye, ich sah. das Problem ist, dass ich nicht überall finden kann meinen Benutzername/Passwort für den Proxy zu setzen, das ist nur eine Enumeration von Authentifizierungstypen ... – Gareth

+1

ich habe nicht Ausprobiert, aber ich habe gesehen, dass Sie Ihre Standard-Proxy-Anmeldedaten, die Sie in IE festgelegt haben, verwenden können – sebagomez

+0

zu schnell getippt :) Ich habe nicht versucht es, aber für das, was ich sah ... – sebagomez

1

Aus den Kommentaren zu meiner Antwort ich denke, es ist nicht möglich, unterschiedliche Anmeldeinformationen für Service-Authentifizierung und HTTP-Proxy zu haben.

, die saugen! :(

+0

ye. Naja. Wir gehen mit einem "Verwenden Sie die Standard-System-Proxy" oder "Verwenden Sie keinen Proxy" -Option ... Vielen Dank für Ihre Hilfe! – Gareth

+0

Genau! Prüfen Sie dies: http://kennyw.com/indigo/106 Bye –