2010-04-01 15 views
14

Todo,WCF servicio web cambio de nombre WSDL y targetNamespace

soy un poco nuevo en WCF sobre IIS, pero lo han hecho algunos servicios web ASMX antes. Mi servicio WCF está funcionando pero la página de ayuda generada por el servicio web para mí tiene los nombres predeterminados, es decir, la página que dice:

Ha creado un servicio.

Para probar este servicio, deberá crear un cliente y usarlo para llamar al servicio. Para ello, puede utilizar la herramienta svcutil.exe desde la línea de comandos con la siguiente sintaxis:

svcutil.exe http://localhost:53456/ServicesHost.svc?wsdl

En un sitio ASMX nivel que cabe utilizar el método/atributos de clase para dar el servicio web de un nombre y un espacio de nombres Cuando hago clic en el enlace WSDL tiene:

<wsdl:definitions name="SearchServices" targetNamespace="http://tempuri.org/" 

es decir, no el servicio WCF nombre de contrato y de mi espacio de nombres de interfaz. Supongo que el MEX está utilizando algún tipo de configuración predeterminada, pero me gustaría cambiarlos por los nombres correctos. ¿Cómo puedo hacer esto?

Respuesta

36

Agregue esto a su contrato de servicio

[ServiceContract(Namespace = "http://some.com/service/", Name = "ServiceName")] 

Agregar a su implementación del servicio

[ServiceBehavior(Namespace = "http://some.com/service/")] 

Agregar a su web.config

<endpoint binding="basicHttpBinding" bindingNamespace="http://myservice.com".... 
+0

ya tengo: [ServiceContract ( name = "", XXXXServices Namespace = "http: // esquemas/XXXX/2010/03")] IPublicServices interfaz pública No hace ninguna diferencia cuando Genero el WSDL de la página enumerada en mi publicación original. La interfaz anterior está implementada por una clase llamada SearchServices, de ahí el nombre generado en la definición de WSDL cuando hago clic en el enlace http: // localhost: 53456/ServicesHost.svc? Wsdl – Graham

+0

Sí, pero ¿cómo hace que el Namespace dinámico . Para un WSDL necesitamos ese Namespace (estoy usando una url) para cambiar en función del entorno. Ejemplo MyCompany.api.stage y MyCompany.api.dev, y así sucesivamente. Si lo codifica en la definición del servicio en estos atributos, las personas que están probando wsdl a través de SOAPUI obtienen errores de socket porque no pueden comunicarse con la URL del servidor correcto. – PositiveGuy

4

En realidad, debería ser puesto en ServiceBehavior:

[ServiceBehavior(Namespace = "http://some.com/service/", Name = "ServiceName"] 

A continuación, se cambiará el nombre WSDL.

Cuestiones relacionadas