2010-11-23 11 views
8

Ich schreibe ein Programm, das ohne Proxy und mit Proxy mit Authentifizierung funktionieren sollte - automatisch! Es sollte einen WCF-Dienst aufrufen. In diesem Beispiel heißt die Instanz client. Ich benutze auch eine selbst geschriebene Klasse (proxyHelper), die die Anmeldeinformationen anfordert.Holen Sie sich die URI aus dem Standard-Web-Proxy

BasicHttpBinding connection = client.Endpoint.Binding as BasicHttpBinding;<br/> 
connection.ProxyAddress = _???_<br/> 
connection.UseDefaultWebProxy = false;<br/> 
connection.BypassProxyOnLocal = false;<br/> 
connection.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;<br/> 
client.ClientCredentials.UserName.UserName = proxyHelper.Username; 
client.ClientCredentials.UserName.Password = proxyHelper.Password; 

Ich habe ein Problem mit der ProxyAddress. Wenn ich HttpWebRequest.GetSystemWebProxy() verwende, um tatsächlich definierten Proxy zu erhalten, sehe ich im Debug-Modus die korrekte Proxy-Adresse, aber es ist eine nicht öffentliche Eigenschaft. Das Setzen von UseDefaultWebProxy auf true funktioniert nicht und wenn ich die Proxy-Adresse fest codiere und das UseDefaultWebProxy auf false setze, funktioniert es einwandfrei. Also ... wie kann ich die Adresse des Standard-Web-Proxy sammeln?

Antwort

15

Der Proxy hat eine Methode namens GetProxy, die verwendet werden kann, um den URI des Proxy zu erhalten.

Hier ist ein Ausschnitt aus der Beschreibung von MSDN:

Die GetProxy Methode der URI gibt , dass die WebRequest Instanz der Internet-Ressource Zugriff verwendet.

GetProxy vergleicht das Ziel mit dem Inhalt von BypassList mit der IsBypassed-Methode. Wenn IsBypassed Wahr zurückgibt, gibt GetProxy das Ziel zurück, und die WebRequest-Instanz verwendet den Proxyserver nicht.

Wenn Ziel nicht in bypass ist, die WebRequest-Instanz verwendet den Proxy-Server und die Eigenschaft Adresse ist zurückgegeben.

Sie können den folgenden Code verwenden, um die Proxy-Details abzurufen. Beachten Sie, dass die URI, die Sie an die GetProxy-Methode übergeben, wichtig ist, da nur die Proxy-Anmeldeinformationen zurückgegeben werden, wenn der Proxy für die angegebene Uri nicht umgangen wird.

var proxy = System.Net.HttpWebRequest.GetSystemWebProxy(); 

//gets the proxy uri, will only work if the request needs to go via the proxy 
//(i.e. the requested url isn't in the bypass list, etc) 
Uri proxyUri = proxy.GetProxy(new Uri("http://www.google.com")); 

proxyUri.Host.Dump();  // 10.1.100.112 
proxyUri.AbsoluteUri.Dump(); // http://10.1.100.112:8080/ 
+3

Funktioniert perfekt, vielen Dank! Ich habe gerade die Zeile hinzugefügt: Uri proxyAddress = proxy.GetProxy (client.Endpoint.Address.Uri); – Jan

+0

Sie sind herzlich willkommen :-) –

+0

Ich habe die '.Dump()' Methode nicht verfügbar. Welche Bibliothek ist das? – codeMonkey

Verwandte Themen