lunes, 11 de febrero de 2008
Evitando el namespace "http://tempuri.org" con WCF
Hace unos días me toco quitar el ya conocido http://tempuri.org del WSDL y asignarle un namespace específico, es más, esto es lo recomendado por seguridad y como buena practica, en fin, para conseguirlo bastará con lo siguiente:
- Especificar el Namespace en el ServiceContract (Interfaces):
[ServiceContract(Namespace = "http://MyProject.Tests")]
- Especificar el Namespace en cada uno de los tipos/clases de datos o contratos; DataContract
[DataContract(Namespace="http://MyProject.Tests")]
- Quitar el http://tempuri.org de la definición del WSDL y para ello:
- Añadir el siguiente atributo al servicio:
[ServiceBehavior(Namespace="http://MyProject.Tests")] - Modificar/Añadir valor a la propiedad "bindingNamespace" del endpoint del servicio según indico concretamente en la línea 2, si no se tiene en cuenta este punto, el namespace por defecto es es "tempuri.org" y aunque cambiemos el namespace en los tres puntos anteriores, este no cambiará:
1 <service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
2 <endpoint bindingNamespace="http://MyProject.Tests" address="" binding="wsHttpBinding" contract="WcfService1.IService1">ó, graficamente:
El valor para esta propiedad, aunque puede ser cualquiera, ¡con un poco de sentido común, claro!, sería conveniente que tomara el mismo que el indicado para el "[ServiceBehavior]".
Este último punto fue el que más tardé en encontrar, ¡y mira que está visible! :-D ¡si leyera un poco de vez en cuando!, jeje... ¡si es que lo dice claramente al pie de la ventana! De todos modos, es curioso, porque todos los post y artículos que hacen referencia a los namespaces, pasan por alto este último punto.
Una ayudita más, un gran logro, :-D.
Saludos
Juanlu
Etiquetas: Framework .NET, Visual Studio 2008, WCF, Windows Communication Foundation