Appeler des Web Services derrière un proxy

web service

Si vous êtes amené à interroger un Web Service (ou toute autre source de données via une requête Web) en étant derrière un proxy, cet article devrait vous rendre service.

Pour rappel, voici un extrait de code qui présente un cas de figure simple et représentatif :

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(siteUrl);

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

using (Stream responseStream = response.GetResponseStream())

{…}

Au moment d’appeler la méthode « GetResponseStream() », si vous travaillez derrière un proxy, vous obtiendrez l’erreur suivante :

Impossible de se connecter au serveur distant

InnerException : Une tentative de connexion a échoué car le parti connecté n’a pas répondu convenablement au-delà d’une certaine durée ou une connexion établie a échoué car l’hôte de connexion n’a pas répondu <adresse IP:port>

En anglais :

Unable to connect to the remote server

A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond <adresse IP:port>

En effet, que vous ayez configuré le proxy au niveau de votre navigateur (pour Firefox par exemple) ou au niveau des « Options Internet » de Windows (c’est-à-dire pour Internet Explorer et pour Chrome notamment), ceci n’est pas pris en compte par IIS.

Il y’a donc une petite chose à ajouter dans le Web.config de votre application pour passer par le proxy.

Il y a globalement deux cas de figure :

Soit vous avez configuré le proxy en « Configuration automatique » en indiquant un « script de configuration automatique », il faudra ajouter les lignes suivantes à hauteur du nœud <configuration> :

<defaultProxy>
    <proxy scriptLocation="http://<adresse.du.script>.proxy" />
</defaultProxy>

Où vous aurez bien entendu remplacé la valeur de « scriptLocation » par l’adresse du fichier qui vous concerne. Il s’agit souvent d’un .proxy ou d’un .dat.

A noter tout de même : beaucoup d’exemples mentionnent la présence du paramètre « bypassonlocal="True" ». Cela fut bloquant dans mon cas. Vous trouverez davantage d’explications ici :

https://blogs.msdn.microsoft.com/rickrain/2011/03/25/why-scriptlocation-may-not-work-when-pointing-to-a-proxy-script-file-in-your-application-config-file/

Soit vous avez configuré le proxy en « Serveur proxy » standard, en indiquant l’adresse et le port dans les champs prévus à cet effet. Le paramétrage devient alors :

<defaultProxy>
    <proxy proxyaddress="adresse.proxy:port" />
</defaultProxy>

 

Et voilà ! Le tour est joué !

Pour plus d’informations et d’autres exemples :

http://www.ndrou.fr/2011/10/08/asp-net-configuration-pour-connexion-derriere-un-proxy/

https://msdn.microsoft.com/fr-fr/library/sa91de1e(v=vs.110).aspx

Un commentaire

  1. Bonjour,
    Je pourrais compléter ce merveilleux topic par un autre que je trouve complémentaire qui spécifie le proxy par type et pays https://www.contournerhadopi.com/proxy/
    vous n’avez qu’à le tester, personnellement je l’ai trouvé d’une grande utilité tout comme cet article surtout du côté de Web.config de mon application. Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *