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! 😀  ¡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

Leave a Reply

Your email address will not be published. Required fields are marked *