2010-04-01 2 views
14

Tutti,WCF Web Service cambio di nome WSDL e targetNamespace

Sono un po 'nuova per WCF su IIS, ma hanno fatto alcuni servizi web ASMX prima. Il mio servizio WCF è attivo e funzionante, ma la pagina di supporto generata dal servizio Web per me ha i nomi predefiniti, ovvero la pagina che dice:

Hai creato un servizio.

Per testare questo servizio, è necessario creare un client e utilizzarlo per chiamare il servizio. È possibile farlo utilizzando lo strumento Svcutil.exe dalla riga di comando con la seguente sintassi:

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

In un sito ASMX standard di userei metodo/attributi di classe per dare al servizio Web un nome e un namespace. Quando clicco sul link del WSDL ha:

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

cioè non il WCF Contratto di Servizio Nome e Namespace dalla mia interfaccia. Presumo che il MEX stia usando qualche tipo di impostazioni predefinite, ma mi piacerebbe cambiarle per essere i nomi corretti. Come posso fare questo?

risposta

36

Aggiungi questo al vostro contratto di servizio

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

aggiungere questo alla tua implementazione del servizio

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

Aggiungi questo al vostro web.config

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

ho già: [ServiceContract ( name = "XXXXServices", Namespace = "http: // schemi/XXXX/2010/03")] IPublicServices interfaccia pubblici non fa alcuna differenza quando Genero il WSDL dalla pagina elencata nel mio post originale. L'interfaccia precedente è implementata da una classe denominata SearchServices, da cui il nome generato nella definizione di WSDL quando faccio clic su http: // localhost: 53456/ServicesHost.svc? Wsdl link – Graham

+0

sì, ma come si fa a rendere dinamico lo spazio dei nomi . Per un WSDL abbiamo bisogno che Namespace (sto usando un URL) per cambiare in base all'ambiente. Esempio MyCompany.api.stage e MyCompany.api.dev e così via. Se lo si codifica nella definizione del servizio su questi attributi, le persone che stanno testando wsdl tramite SOAPUI ottengono errori di socket perché non possono comunicare all'URL del server corretto – PositiveGuy

4

In realtà, dovrebbe essere messo on ServiceBehavior:

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

Quindi il nome WSDL verrà modificato.