Consumir un Web Service a traves de proxy con C#

Vamos a explicar como consumir un Servicio Web o Web Service a traves de proxy, es decir, nuestra aplicación tiene que conectarse a un servicio web que no está en nuestro servidor y además, salimos a internet a través de un proxy.

Normalmente si intentamos añadir el web service a nuestro proyecto (para comprender que es un web service ver este ejemplo) ya sea de consola, gráfico o de cualquier tipo, si tenemos un proxy nos da problemas, no es capaz de reconocerlo, dando diversos errores relacionados con la autentificación, por ejemplo este: “discoveryError & mexError”.

Antes de volvernos locos buscando por mil páginas web y probando todo tipo de soluciones complejas, podemos realizar lo siguiente, que además de sencillo, funciona.

 

 

Web Service a traves de proxy: agregando la referencia web

Antes de ir a nuestro proyecto, seleccionarlo, dar botón derecho para mostrar el menú contextual donde buscaremos “agregar referencia de servicio…” y donde meteremos la url externa del servicio web que por supuesto no funciona, porque estamos detrás de un proxy, vamos a hacer otra cosa.

Crearemos en caso de no tenerlo, un archivo App.Config. En nuestro proyecto agregaremos un elemento nuevo, que será: “Archivo de configuración de aplicaciones”. Este fichero es unarchivo xml de configuración donde puedes meter diversas configuraciones, que se podrán leer fácilmente con ConfigurationManager.

En app.config, dentro del nodo <configuration> meteremos lo siguiente:

web service a traves de proxy

Versión en texto:

<system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true"></defaultProxy>
</system.net>

Esto hará que al agregar la referencia web, se usen las credenciales por defecto del proxy y pueda agregarse sin problemas de autentificación. Por supuesto esto requiere que los datos del proxy esten correctamente configurados en el infame Internet Explorer o en la red del equipo. Si no estuviera correctamente configurado, preguntar al administrador de vuestra red, o sino fuera posible, se puede poner otro fragmento xml parecido que incorpore lso datos del proxy, host y puerto.

Bueno, tras el app.config, agregamos la referencia web normalmente:

  1. Seleccionamos “Agregar referencia de servicio…”
  2. En la ventana que se abre, damos al botón “Avanzadas…”
  3. Pulsamos el botón “Agregar referencia web…”
  4. Metemos url (por ej: http://xxxxxx/xxxx.asmx) en su casilla y buscamos
  5. Ponemos un nombre en “Nombre de referencia web”, con el que llamaremos al web service después.
  6. Pulsamos al botón “Agregar Referencia”

Web Service a traves de proxy: consumiendo el servicio web.

El último paso a realizar para poder consumir el web service a traves de proxy es indicarle mediante código que use las credenciales por defecto. Para ello, cuando instanciemos el servicio, con el nombre que pusimos en el paso 5 del punto anterior, realizaremos esto en neustro código c#:

ServicioWeb.General MiServicio = new GRSSFeed.General();
MiServicio.Proxy = System.Net.HttpWebRequest.GetSystemWebProxy();
MiServicio.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

Una vez hecho esto, se puede acceder a los métodos del servicio sin problemas con el proxy.

 

 

 

 

4351 visitas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *