Se produce un error en un cliente .NET que consume un servicio web a través de un servidor proxy HTTP

Este artículo le ayuda a resolver un problema en el que se ha cerrado un error (se ha cerrado la conexión subyacente: no se pudo resolver el nombre remoto) cuando se usa un cliente .NET para consumir un servicio web a través de un servidor proxy HTTP.

Versión del producto original:   .NET Framework
Número KB original:   318140

Síntomas

Cuando usa un cliente .NET para consumir un servicio web a través de un servidor proxy HTTP, puede recibir el siguiente mensaje de error:

Se cerró la conexión subyacente: no se pudo resolver el nombre remoto.

Causa

Existe un servidor proxy HTTP entre el servicio web y el cliente .NET y no se ha configurado la configuración de proxy adecuada.

Solución

Para resolver este problema, proporcione las opciones de configuración de proxy adecuadas al cliente .NET.

A continuación se muestra la configuración predeterminada del Machine.config archivo:

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

Si la configuración predeterminada no detecta automáticamente la configuración del servidor proxy, establezca en false y, a continuación, designe usessystemdefault explícitamente el servidor proxy. Para designar explícitamente el servidor proxy, use el archivo Machine.config o Web.config, o bien especifique el servidor mediante programación.

Para especificar el servidor proxy, establezca la configuraciónMachine.configo Web.config archivo de la siguiente manera:

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

Para cambiar la configuración mediante programación mediante un WebProxy objeto, use el siguiente código de ejemplo:

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 ();

Servidores proxy que requieren autenticación NTLM

Para establecer Windows de NT LAN Manager (NTLM) para el servidor proxy, use el siguiente código de ejemplo:

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

También puede usar proxy para todo el sistema de forma predeterminada. Para ello, use la siguiente configuración en el archivo de configuración:

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

Referencias