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:
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:
- Seleccionamos «Agregar referencia de servicio…»
- En la ventana que se abre, damos al botón «Avanzadas…»
- Pulsamos el botón «Agregar referencia web…»
- Metemos url (por ej: http://xxxxxx/xxxx.asmx) en su casilla y buscamos
- Ponemos un nombre en «Nombre de referencia web», con el que llamaremos al web service después.
- 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.
8752 visitas.
Exactamente lo que necesitaba, Muchas Gracias.