Crea proxy del servizio Web in Visual Studio da un file WSDL


101

La mia applicazione deve comunicare con un servizio Web che non dispone di una definizione WSDL in linea. Gli sviluppatori mi hanno tuttavia fornito un file WSDL.

Con un WSDL pubblico, Visual Studio può generare questo codice per me utilizzando la procedura guidata di riferimento del servizio. Ma non sembra funzionare senza un WSDL pubblico.

Come faccio a generare il codice per parlare con questo servizio Web utilizzando questo file WSDL?

Risposte:


116

Prova a utilizzare WSDL.exe e quindi a includere il file generato (.cs) nel tuo progetto.

Avvia il prompt dei comandi di Visual Studio (in Visual Studio / Strumenti nel menu Start) quindi digita

>wsdl.exe [path To Your WSDL File]

Questo sputerà un file, che copi / sposti e includi nel tuo progetto. Quel file contiene una classe che è un proxy per il tuo servizio, avvia un'istanza di quella classe e avrà una proprietà URL che puoi impostare al volo e una serie di metodi che puoi chiamare. Genererà anche classi per tutti gli oggetti complessi passati attraverso l'interfaccia del servizio.


2
Grazie! E puoi usare il parametro / o per il percorso del file esportato. ad es.> wsdl.exe example.com/service.wsdl / o: C: \ Users \ X \ Desktop
gkonuralp

2
e facoltativamente aggiungere manualmente uno spazio dei nomi, coprendo tutte le classi, per evitare conflitti con file simili generati.
Blue Clouds

138

L'utilizzo di WSDL.exe non ha funzionato per me (mi ha dato un errore su un tipo mancante), ma sono stato in grado di fare clic con il pulsante destro del mouse sul mio progetto in VS e selezionare "Aggiungi riferimento al servizio". Ho inserito il percorso del file wsdl nel campo Indirizzo e ho premuto "Vai". Questo sembrava essere in grado di trovare tutti i tipi appropriati e ha aggiunto le classi direttamente al mio progetto.


3
Ho affrontato lo stesso scenario e il tuo suggerimento mi ha risparmiato molta frustrazione e probabilmente alcuni capelli. Ti è stata data una meritata reputazione. (Come risultato indiretto, hai ottenuto +100 su tutti i siti :))
Shadow Wizard is Ear For You

Ho provato questo, il file importa, ma non riesco a vedere nel mio codice le classi
guiomie

1
Ho provato questo metodo utilizzando MSVC 2015 ma si è rifiutato di elaborare il file wsdl utilizzando l'URL. Quindi ho usato il metodo descritto da Andrew M.
Hermann

1
L'ho provato da un PC di sviluppo che non dispone dell'autorizzazione per accedere al servizio web. Nonostante il file .wsdl sia in locale, ha provato a connettere il servizio quando ho premuto "Vai". Quindi non sono stato in grado di aggiungere riferimenti. In questa situazione penso che la soluzione di Andrew M. dovrebbe essere preferita. Ha funzionato bene.
gkonuralp

@jeffaudio im di fronte a un problema simile Sono in grado di aggiungere riferimento al servizio per il progetto web ma utilizzando wsdl.exe non sono in grado di generare file proxy. qualche suggerimento ..???
prakash r

15

Nota a margine : se hai tutti i file localmente (non solo il file wsdl ma anche i file xsd) puoi richiamare wsdl.exe in questo modo:

wsdl.exe [path to your wsdl file] [paths to xsd files imported by wsdl]

In questo modo wsdl.exe può risolvere localmente tutte le dipendenze e generare correttamente la classe proxy.

Forse farà risparmiare tempo a qualcuno: risolve l'errore "tipo mancante" quando il servizio non è disponibile online.



2

C'è un Microsoft Doc per creare il tuo fileWCF proxy dalla riga di comando.

Puoi trovare la tua copia locale di wsdl.exein una posizione simile a questa: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools( Ulteriori informazioni qui )

Alla fine Commanddovresti essere simile a questo:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\wsdl.exe"
 /language:CS /n:"My.Namespace" https://www.example.com/service/wsdl

1

salvare il file sul disco e quindi utilizzare quanto segue come URL:

file://your_path/your_file.wsdl

Questo è l'unico che ha funzionato per me poiché il file in questione doveva essere scaricato prima dopo l'autenticazione. Grazie!
Kevin Radcliffe

-1

Poiché il vero URL di binding per il servizio Web si trova nel file, è possibile eseguire questi semplici passaggi dal computer locale:

1) Salva il file sul tuo computer locale, ad esempio:

C:\Documents and Settings\[user]\Desktop\Webservice1.asmx

2) In Visual Studio, fare clic con il pulsante destro del mouse sul progetto> scegliere Aggiungi riferimento Web, si aprirà una finestra di dialogo.

3) Nella casella dell'URL, copiare il percorso del file locale sopra C: \ Documents and Settings [utente] \ Desktop \ Webservice1.asmx, fare clic su Avanti

4) Ora vedrai apparire le funzioni, scegli il tuo nome per il riferimento, fai clic su aggiungi riferimento

5) Hai finito! puoi iniziare a usarlo come spazio dei nomi nella tua applicazione non preoccuparti di aver utilizzato un file locale, perché comunque il vero URL del servizio si trova nel file nella sezione Binding


2
Questo era già stato suggerito in questa risposta esistente perché ripetere?
Shadow Wizard is Ear For You

Perché file asmx quando la domanda riguarda wsdl?
Blue Clouds
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.