Verwendung einer WSDL-Datei zum Erstellen eines WCF-Dienstes (kein Anruf tätigen)

99

Ich habe eine alte WSDL-Datei und möchte einen Server basierend auf dieser WSDL-Datei erstellen.

Die WSDL wird von einem ASMX generiert (ich nehme an, bin mir aber nicht sicher).

Wie kann ich das erreichen?


ursprüngliche Frage, bei der das OP glaubte, er müsse einen Client basierend auf der WSDL erstellen .

Raha
quelle

Antworten:

111

Mit svcutil können Sie Schnittstellen und Klassen (Datenverträge) aus der WSDL erstellen.

svcutil your.wsdl (or svcutil your.wsdl /l:vb if you want Visual Basic)

Dadurch wird eine Datei mit dem Namen "your.cs" in C # (oder "your.vb" in VB.NET) erstellt, die alle erforderlichen Elemente enthält.

Jetzt müssen Sie eine Klasse "MyService" erstellen, die die Dienstschnittstelle (IServiceInterface) - oder die verschiedenen Dienstschnittstellen - implementiert. Dies ist Ihre Serverinstanz.

Jetzt hilft eine Klasse für sich noch nicht wirklich - Sie müssen den Dienst irgendwo hosten. Sie müssen entweder Ihre eigene ServiceHost-Instanz erstellen, die den Dienst hostet, Endpunkte konfigurieren usw., oder Sie können Ihren Dienst in IIS hosten.

marc_s
quelle
Ich habe das gleiche mit svcutil versucht, aber mit Fehlern war ich nicht wirklich erfolgreich. Haben Sie vielleicht einige Vorschläge zu meinem Problem: goo.gl/dlen
Juri
14
"svcutil your.wsdl your.xsd" war das, was ich brauchte, damit meine funktionierte! Vielen Dank!
Tim Lewis
2
In dieser SO-Antwort finden Sie Informationen zum Herunterladen von wsdl und xsd in einem Format, das svcutil gefallen wird. stackoverflow.com/questions/286657/…
Brett Widmeier
@marc_s Wenn ich dies mit meiner WSDL-Datei verwende, scheinen einige Elemente auf sehr seltsame Weise umzubenennen, sodass Anfragen, die an meinen Server eingehen, nicht einmal akzeptiert werden. Ist das normal?
Arj
@Arjun: Nein - das klingt so, als müssten Sie alle relevanten Fakten zusammenstellen und eine Frage zu Stackoverflow stellen! :-)
marc_s
41

Es gibt gute Ressourcen, wenn Sie wissen, wonach Sie suchen müssen. Versuchen Sie "Contract First" und WCF. oder "WSDL First" und WCF.

Hier ist eine Auswahl:

Cheeso
quelle
3
An alle, die der grundlegenden Übersicht über den WSDL-First- Artikel folgen : Beachten Sie den Kommentar, über den gesprochen wird ReplyAction="*". Es scheint, dass Sie das loswerden müssen. Es gibt eine Reihe von Erklärungen aus diesem Kommentar, die die Begründung geben, aber ich habe sie nicht gelesen.
Dan-Gph
30

Verwenden Sie svcutil.exe mit dem /scSchalter, um die WCF-Verträge zu generieren. Dadurch wird eine Codedatei erstellt, die Sie Ihrem Projekt hinzufügen können. Es enthält alle Schnittstellen und Datentypen, die Sie zum Erstellen Ihres Dienstes benötigen. Ändern Sie den Ausgabeort mit dem /oSchalter, oder Sie finden die Datei in dem Ordner, in dem Sie svcutil.exe ausgeführt haben. Die Standardsprache ist C #, aber ich denke (ich habe es noch nie versucht), dass Sie dies mit ändern können sollten /l:vb.

svcutil /sc "WSDL file path"

Wenn Ihre WSDL unterstützende XSD-Dateien enthält, übergeben Sie diese als Argumente nach der WSDL.

svcutil /sc "WSDL file path" "XSD 1 file path" "XSD 2 file path" ... "XSD n file path"

Erstellen Sie dann eine neue Klasse, die Ihr Service ist, und implementieren Sie die soeben erstellte Vertragsschnittstelle.

Dennis Calla
quelle
7

Sie können svcutil.exe verwenden, um Clientcode zu generieren. Dies würde die Definition des Servicevertrags und aller erforderlichen Datenverträge und Fehlerverträge einschließen.

Löschen Sie dann einfach den Clientcode: Klassen, die die Serviceverträge implementieren. Sie müssen sie dann selbst in Ihrem Dienst implementieren.

John Saunders
quelle
4

Mit dem Tool "Dienstreferenz hinzufügen" in Visual Studio können Sie die Adresse wie folgt einfügen:

Datei: ///path/to/wsdl/file.wsdl

Und es wird richtig geladen.

Vagner Gon
quelle