´

C# – WCF – El caso del wsdl con referencias externas apuntando al servidor local

 

Articulo tomado del original

 

C# – WCF – El caso del wsdl con xsd:import schemalocation que no puede ser interpretado desde clientes PHP

 

---

WCF – El caso del wsdl con xsd:import schemalocation apuntando a la url local en lugar de la pública

o

El caso del wsdl con xsd:import schemalocation apuntando a la url local en lugar de la pública

Dentro de mis labores como Arquitecto y Consultor me he encontrado con este caso que es digno de mencionar, y aunque algunos se sorprendan creanme que este escenario es más comun de lo que imaginan.

Supongamos que creamos un servicio WCF en http://my.webpage.com.co ,cuando creamos servicios con WCF el wsdl no muestra directamente los tipos de dato del servicio, sino que genera referencias a unos schemas xsd donde unicamente estan estos detalles, ejemplo:

1
2
3
4
5
6
7
8
9
10
<wsdl:types>
  <xsd:schema targetNamespace="http://tempuri.org/Imports">
                namespace="http://tempuri.org/"/>
                namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
                namespace="http://schemas.datacontract.org/2004/07/MyService"/>
  </xsd:schema>
</wsdl:types>

Vieron lo que sucede? las URL de los xsd no estan apuntando a http://my.webpage.com.co sino a la direccion de la red local http://myLocalServer.webpage.com.co .

A primera impresión es un problema de configuración del WCF, y en efecto al modificar algunos parametros podemos hacer que las URL del wsdl aparezcan solo como http://myLocalServer/MyService.svc , incluso podemos modificar la re esddfritura de URL desde el app.comfig para redireccionar este tipo de peticion es de manera correcta,pero no es un problema fácil de solucionar.

En algunas compañías lo que optan por hacer es modificar su firewall y/o configuracion de dominio público para que permita redireccionar las peticiones a la URL adecuada.

Aunque a primera impresión es un problema de WCF, la realidad es otra. Es un problema en la configuración de IIS.

WCF le pide al web server la dirección host principal para poder armar las rutas a los xsd, y allí es donde IIS le envia el nombre de la máquina local. Pero seamos justos... tampoco es un error de IIS.

Imaginate que tienes un servicio que solo se ejecuta dentro de tu empresa, en ese contexto IIS debe devolverte el nombre local de la máquina, ahora imagina que ese mismo servidor lo conectas a una IP púbica, es decir sin dejar de soportar aúnla URL corporativa, cuando WCF le pregunte al IIS el nombre del host le devolera el nombre local.

Cómo solucionarlo, como los profesionales?

Una de las ventajas que tiene haber iniciado mi carrera como profesional de IT antes de ser developer, es que me permite recordar que NO TODO lo debes resolver por código. IIS nos permite configurar los host names para cada sitio.

Vamos a nuestro sitio donde se publico el WCF, clic derecho propiedades, pestaña Web Site y damos clic en el boton advanced.

Damos doble clic sobre el host por defecto y lo editamos, dejando el nombre público correcto de nuestro servidor.

Y eso es todo! ahora las URL de los xsd referenciados desde el wsdl estan direccionadas correctamente.

 

Leave a Comment

(required) 

(required) 

(optional)
 

(required) 

If you can't read this number refresh your screen
Enter the numbers above: