Erstellen Sie einen Webdienst-Proxy in Visual Studio aus einer WSDL-Datei

101

Meine Anwendung muss mit einem Webdienst kommunizieren, der keine Online-WSDL-Definition hat. Die Entwickler haben mir jedoch eine WSDL-Datei zur Verfügung gestellt.

Mit einer öffentlichen WSDL kann Visual Studio diesen Code mithilfe des Dienstreferenz-Assistenten für mich generieren. Aber ohne eine öffentliche WSDL scheint es nicht zu funktionieren.

Wie generiere ich den Code für die Kommunikation mit diesem Webdienst mithilfe dieser WSDL-Datei?

Anne
quelle

Antworten:

116

Versuchen Sie es mit WSDL.exe und dann die generierte Datei (.cs) in Ihr Projekt ein.

Starten Sie die Visual Studio-Eingabeaufforderung (unter Visual Studio / Tools im Startmenü) und geben Sie ein

>wsdl.exe [path To Your WSDL File]

Dadurch wird eine Datei ausgespuckt, die Sie kopieren / verschieben und in Ihr Projekt aufnehmen. Diese Datei enthält eine Klasse, die ein Proxy für Ihren Dienst ist. Starten Sie eine Instanz dieser Klasse, und sie enthält eine URL-Eigenschaft, die Sie im laufenden Betrieb festlegen können, sowie eine Reihe von Methoden, die Sie aufrufen können. Außerdem werden Klassen für alle / alle komplexen Objekte generiert, die über die Serviceschnittstelle übergeben werden.

Andrew M.
quelle
2
Vielen Dank! Und Sie können den Parameter / o für den Pfad der exportierten Datei verwenden. zB> wsdl.exe example.com/service.wsdl / o: C: \ Users \ X \ Desktop
gkonuralp
2
Fügen Sie optional manuell einen Namespace hinzu, der alle Klassen abdeckt, um Konflikte mit ähnlichen generierten Dateien zu vermeiden.
Blaue Wolken
138

Die Verwendung von WSDL.exe funktionierte bei mir nicht (gab mir einen Fehler bezüglich eines fehlenden Typs), aber ich konnte mit der rechten Maustaste auf mein Projekt in VS klicken und "Dienstreferenz hinzufügen" auswählen. Ich habe den Pfad zur wsdl-Datei in das Feld Adresse eingegeben und auf "Los" geklickt. Das schien in der Lage zu sein, alle richtigen Typen zu finden und die Klassen direkt zu meinem Projekt hinzuzufügen.

jeffaudio
quelle
3
Das gleiche Szenario und Ihr Vorschlag haben mir viel Frust und wahrscheinlich ein paar Haare erspart. Der wohlverdiente Repräsentant wurde Ihnen gegeben. (Als indirektes Ergebnis haben Sie +100 auf allen Websites erhalten :))
Shadow Wizard ist Ear For You
Ich habe versucht, die Datei zu importieren, aber ich kann in meinem Code die Klassen nicht sehen
guiomie
1
Ich habe diese Methode mit MSVC 2015 ausprobiert, aber es wurde abgelehnt, die WSDL-Datei mithilfe der URL zu verarbeiten. Also habe ich die von Andrew M. beschriebene Methode angewendet
Hermann
1
Ich habe dies von einem Entwicklungs-PC aus versucht, der keine Berechtigung zum Zugriff auf den Webdienst hat. Obwohl sich die .wsdl-Datei lokal befindet, wurde versucht, eine Verbindung zum Dienst herzustellen, als ich auf "Los" drückte. Daher konnte ich keine Referenz hinzufügen. In dieser Situation sollte meiner Meinung nach die Lösung von Andrew M. bevorzugt werden. Es hat gut funktioniert.
Gkonuralp
@ jeffaudio Ich stehe vor einem ähnlichen Problem. Ich kann eine Dienstreferenz für ein Webprojekt hinzufügen, aber mit wsdl.exe kann ich keine Proxy-Datei generieren. irgendein Vorschlag ..???
Prakash r
15

Nebenbei bemerkt: Wenn Sie alle Dateien lokal haben (nicht nur die WSDL-Datei, sondern auch die XSD-Dateien), können Sie wsdl.exe auf folgende Weise aufrufen:

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

Auf diese Weise kann wsdl.exe alle Abhängigkeiten lokal auflösen und die Proxy-Klasse korrekt generieren.

Vielleicht spart es jemandem etwas Zeit - es löst den "fehlenden Typ" -Fehler, wenn der Dienst online nicht verfügbar ist.

Jarek Mazur
quelle
3

Probieren Sie das mit dem .NET Framework SDK gelieferte WSDL To Proxy-Klassentool aus . Ich habe es noch nie benutzt, aber es sieht auf jeden Fall so aus, wie Sie es brauchen.

Steve Danner
quelle
2

Es gibt ein Microsoft-Dokument zum Erstellen IhresWCF Proxys über die Befehlszeile.

Sie finden Ihre lokale Kopie wsdl.exean einem ähnlichen Ort: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools( Weitere Informationen hier )

Am Ende Commandsollte Ihr ungefähr so ​​aussehen:

"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
Serj Sagan
quelle
1

Speichern Sie die Datei auf Ihrer Festplatte und verwenden Sie Folgendes als URL:

file://your_path/your_file.wsdl
Evan Camilleri
quelle
Dies ist die einzige, die für mich funktioniert hat, da die betreffende Datei erst nach der Authentifizierung heruntergeladen werden musste. Vielen Dank!
Kevin Radcliffe
-1

Da sich die wahre Bindungs-URL für den Webdienst in der Datei befindet, können Sie diese einfachen Schritte von Ihrem lokalen Computer aus ausführen:

1) Speichern Sie die Datei auf Ihrem lokalen Computer, zum Beispiel:

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

2) Klicken Sie in Visual Studio mit der rechten Maustaste auf Ihr Projekt> Wählen Sie Webreferenz hinzufügen. Ein Dialogfeld wird geöffnet.

3) Kopieren Sie im URL-Feld den lokalen Dateispeicherort über C: \ Dokumente und Einstellungen [Benutzer] \ Desktop \ Webservice1.asmx und klicken Sie auf Weiter

4) Nun werden die Funktionen angezeigt. Wählen Sie Ihren Namen für die Referenz. Klicken Sie auf Referenz hinzufügen

5) Du bist fertig! Sie können es als Namespace in Ihrer Anwendung verwenden. Machen Sie sich keine Sorgen, dass Sie eine lokale Datei verwendet haben, da sich die wahre URL für den Dienst ohnehin in der Datei im Abschnitt Bindung befindet

Israel Margulies
quelle
2
Dies wurde bereits in dieser bestehenden Antwort vorgeschlagen. Warum wiederholen?
Shadow Wizard ist Ear For You
Warum asmx-Datei, wenn es um wsdl geht?
Blaue Wolken