El consumo de un servicio web a través de un servidor proxy de Internet, utilizando un cliente de WCF en C #; proporcionar autenticación del servidor proxy

StackOverflow https://stackoverflow.com/questions/1672477

Pregunta

Tengo un programa cliente que consume a un servicio web. Funciona bastante bien en una serie de instalaciones. Ahora tengo una situación en la que un nuevo cliente se conecta a Internet mediante un servidor proxy, y el intento de mi programa para acceder al servicio web recibe el "estado HTTP 407: autenticación de proxy necesaria". Error

pensé que toda la configuración de acceso a Internet, incluyendo la dirección del servidor proxy, el número de puerto y la autenticación se realiza en el panel de control Opciones de Internet, y que no tendría que preocuparse por eso en el código, o incluso en app.config, del cliente de servicios web.

¿Tengo todo mal?

Lo que he hecho en el tiempo medio es dar al usuario la oportunidad de configurar el nombre de usuario y contraseña del proxy, y luego en mi código que haga lo siguiente:

webServiceClient.ClientCredentials.UserName.UserName = configuredUsername;
webServiceClient.ClientCredentials.UserName.Password = configuredPassword;

Pero no sé que esto es lo correcto. Porque me parece que los ClientCredentials anteriores se referiría al enlace de servicio web / seguridad, no al servidor proxy de Internet.

supongo que puedo trato al cliente, sino que preferiría estar seguro de lo que estoy haciendo en primer lugar.

¿Fue útil?

Solución

He encontrado la manera de hacer esto, con la ayuda de un contribuyente a otro foro que en la oleada de tratar todo tipo de cosas que he olvidado. Así que gracias a esa persona ahora olvidado.

Este es el código que funcionó en el final (convenientemente disfrazados, pero da la idea derecha):

    BasicHttpBinding binding = new BasicHttpBinding("APISoap"); /* APISoap is the name of the binding element in the app.config */
    binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
    binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;
    binding.UseDefaultWebProxy = false;
    binding.ProxyAddress = new Uri(string.Format("http://{0}:{1}", proxyIpAddress, proxyPort)); 
    EndpointAddress endpoint = new EndpointAddress("http://www.examplewebservice/api.asmx");

    WebServiceClient client = new WebServiceClient(binding, endpoint);

    client.ClientCredentials.UserName.UserName = proxyUserName;
    client.ClientCredentials.UserName.Password = proxyPassword;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top