2010-11-23 4 views
8

J'écris un programme qui devrait fonctionner sans proxy et avec proxy avec authentification - automatiquement! Il devrait appeler un service WCF. Dans cet exemple, l'instance est appelée client. J'utilise également une classe auto-écrite (proxyHelper) qui demande les informations d'identification.Récupère l'URI du proxy web par défaut

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; 

Je rencontre un problème lors de l'obtention de l'adresse proxy. Si j'utilise HttpWebRequest.GetSystemWebProxy() pour obtenir un proxy défini réel, je vois en mode débogage l'adresse proxy correcte mais c'est une propriété non publique. Définir UseDefaultWebProxy sur true ne fonctionne pas et si j'ajoute l'adresse proxy codée en dur et que l'option UseDefaultWebProxy est définie sur false, cela fonctionne correctement. Alors ... comment puis-je rassembler l'adresse du proxy web par défaut?

Répondre

15

Le proxy a une méthode appelée GetProxy qui peut être utilisée pour obtenir le Uri du proxy.

Voici un extrait de la description de MSDN:

La méthode GetProxy retourne l'URI que l'instance WebRequest utilise pour l'accès à la ressource Internet. GetProxy compare la destination avec le contenu de BypassList, en utilisant la méthode IsBypassed. Si IsBypassed renvoie true, GetProxy renvoie la destination et l'instance WebRequest n'utilise pas le serveur proxy .

Si la destination est pas bypasslist, l'instance WebRequest utilise le serveur proxy et la propriété Adresse est retourné.

Vous pouvez utiliser le code suivant pour obtenir les détails du proxy. Notez que l'Uri que vous transmettez à la méthode GetProxy est important car il ne vous renvoie que les informations d'identification du proxy si le proxy n'est pas ignoré pour l'Uri spécifié.

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

Fonctionne parfaitement, merci beaucoup! Je viens d'ajouter la ligne: Uri proxyAddress = proxy.GetProxy (client.Endpoint.Address.Uri); – Jan

+0

Vous êtes les bienvenus :-) –

+0

Je n'ai pas la méthode '.Dump()' disponible. Quelle bibliothèque est-ce? – codeMonkey

Questions connexes