2010-01-23 9 views
7

Capisco che questo è un argomento di base, ma non l'ho mai fatto prima di iniziare da wsdl.Dato il file di tipo wsdl + xds, come posso creare un webservice di stub WCF?

Mi viene consegnato un file wsdl e un gruppo di xsd con le definizioni dei tipi. Non ho la minima idea se sono stati creati da un servizio WCF (suppongo di sì a causa del formato split-out), ma ho bisogno di creare un servizio WCF che implementa il contratto.

Domanda: Come si ottiene l'interfaccia del contratto di assistenza?

Conosco wsdl.exe e svcutil.exe - ma non troppo familiare con cosa è cosa. Immagino che dopo tutto ciò che resta è l'attuazione del contratto di servizio.

Qualsiasi aiuto apprezzato!

P.S. Avevo un'altra domanda su questo, ma ho cercato di mettere troppe cose nella stessa domanda - quindi per ora è semplice.

risposta

13

si hanno due scelte:

Opzione 1: Utilizzare l'utilità svcutil.exe sulla riga di comando. Dovrebbe essere installato nella tua directory C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin (o qualcosa di simile, a seconda della macchina e del sistema operativo in uso)

Usa svcutil -? per la lista di tutti i molti parametri. In sostanza, nella sua forma più semplice, utilizzare:

svcutil (name of your service).wsdl (name of your datafile).xsd 

e che creerà un file # (name of your service).cs C corrispondente con il servizio e contratti dati, e un file di esempio di configurazione.

Il file * .cs risultante (o * .vb, se si desidera VB.NET) conterrà il contratto di servizio (i metodi, derivanti dal WSDL) ei contratti di dati (la parte dei dati, proveniente da XSD) per il tuo servizio.

Opzione 2: Utilizzare la finestra di dialogo "Add Service Reference" in Visual Studio (sul nodo "Riferimenti" nella soluzione Explorer) e basta inserire il nome del file del file WSDL:

Add Service Reference dialog

Questo creerà un riferimento di servizio, che è fondamentalmente uguale all'output dall'utilità svcutil.exe, oltre a qualche classe di helper e file per Visual Studio. Sfortunatamente, in entrambi i casi, l'importazione creerà un file di configurazione orribilmente sovraccarico che è probabilmente uno dei motivi per cui molti programmatori pensano che WCF sia terribilmente complicato - in realtà non lo è, ma questi due strumenti di importazione fanno solo un lavoro terribilmente brutto su come creare la configurazione di base per te .... non lasciarti spaventare!

Se il riferimento al servizio di aggiunta per WSDL non converte automaticamente tutti i file XSD pertinenti e necessari, potrebbe essere necessario aggiungerli al progetto e quindi utilizzare qualcosa come XSD2Code per convertirli in C# (o VB.NET) lezioni per te.

Il wsdl.exe è l'utilità deprecato per convertire un file WSDL in un ASMX (ASP.NET webservice) stub - non usare più così, utilizzare svcutil.exe o Visual Studio Aggiungi servizio di riferimento per WCF.

Per quanto riguarda la creazione di una corretta e minima configurazione di WCF, controllare il programma televisivo DotNet Rocks # 122 con Miguel Castro dal titolo Extreme WCF. Miguel rappresenta un ottimo modo per strutturare i tuoi progetti WCF e per creare la stessa quantità di configurazione necessaria (e quindi può essere capita molto meglio del disordine generato da svcutil).

+0

grazie per l'aiuto! - per indovinare avevo già provato con il metodo di aggiunta, con mia sorpresa non appariva un'interfaccia, solo un mucchio di classi (come da specifiche che ho ottenuto con la wsdl). Inoltre, per quanto riguarda il file di configurazione, posso semplicemente buttarlo via e avviare un nuovo servizio implementando il contratto di servizio e includendo i tipi di dati? – JohnIdol

+0

@JohnIdol: certo, puoi lanciare la configurazione e quindi ricreare solo ciò che è necessario. Non è affatto una cattiva idea :-) Tipicamente, quando si aggiunge il Ref. Servizio, si dovrebbe ottenere un sacco di classi, ma in uno dei file, ci dovrebbe essere un'interfaccia da qualche parte, su cui basare l'implementazione di serviec. –

+0

@marc_s: Penso di aver aggiunto "riferimento web" (utilizzato l'host locale) e non "aggiungi riferimento al servizio" quando ho provato l'ultima volta. Questo potrebbe fare la differenza in termini di interfaccia non mostrata? ;) – JohnIdol