Une erreur se produit sur un client .NET qui consomme un service Web via un serveur proxy HTTP

Cet article vous aide à résoudre un problème où une erreur (la connexion sous-jacente a été fermée : Le nom distant n’a pas pu être résolu) se produit lorsque vous utilisez un client .NET pour consommer un service Web via un serveur proxy HTTP.

Version d’origine du produit : .NET Framework
Numéro de la base de connaissances d’origine : 318140

Symptômes

Lorsque vous utilisez un client .NET pour consommer un service Web via un serveur proxy HTTP, vous pouvez recevoir le message d’erreur suivant :

La connexion sous-jacente a été fermée : le nom distant n’a pas pu être résolu.

Cause

Il existe un serveur proxy HTTP entre le service Web et le client .NET, et les paramètres de proxy appropriés n’ont pas été configurés.

Résolution

Pour résoudre ce problème, fournissez les paramètres de configuration de proxy appropriés au client .NET.

Voici les paramètres par défaut dans le fichier Machine.config :

<configuration>
    <system.net>
        <defaultProxy>
            <proxy
               usesystemdefault = "true"
            />
        </defaultProxy>
    </system.net>
</configuration>

Si les paramètres par défaut ne détectent pas automatiquement les paramètres du serveur proxy, définissez usessystemdefault sur false, puis désignez explicitement le serveur proxy. Pour désigner explicitement le serveur proxy, utilisez le fichier Machine.config ou Web.config , ou spécifiez le serveur par programmation.

Pour spécifier le serveur proxy, définissez les paramètres de fichierMachine.config ou Web.config comme suit :

<configuration>
    <system.net>
        <defaultProxy>
            <proxy
               usesystemdefault = "false"
               proxyaddress="http://proxyserver"
               bypassonlocal="true"
            />
        </defaultProxy>
    </system.net>
</configuration>

Pour modifier les paramètres par programmation à l’aide d’un WebProxy objet, utilisez l’exemple de code suivant :

using System.Net;
com.someserver.somewebservice.someclass MyWebServiceClass = new com.someserver.somewebservice.someclass ();
IWebProxy proxyObject = new WebProxy ("http://myproxyserver:80", true);
MyWebServiceClass.Proxy = proxyObject;
MyWebServiceClass.MyWebMethod ();

Serveurs proxy qui nécessitent l’authentification NTLM

Pour définir l’authentification windows NT LAN Manager (NTLM) pour le serveur proxy, utilisez l’exemple de code suivant :

using System.Net;
WebProxy myProxy = new WebProxy ("http://proxyserver:port", true);
myProxy.Credentials = CredentialCache.DefaultCredentials;
FindServiceSoap myFindService = new FindServiceSoap ();
myFindService.Proxy = myProxy;

Vous pouvez également utiliser le proxy à l’échelle du système par défaut. Pour ce faire, utilisez les paramètres suivants dans le fichier de configuration :

<configuration>
    <system.net>
        <defaultProxy>
            <proxy
               proxyaddress = "http://proxyserver:80"
               bypassonlocal = "true"
            />
        </defaultProxy>
    </system.net>
</configuration>

References