2010-01-23 4 views
7

Ich verstehe, das ist ein grundlegendes Thema, aber noch nie getan, bevor Sie von WSDL starten.Gegeben wsdl + xds type Datei, wie erstelle ich einen Stub WCF Webservice?

Ich werde eine WSDL-Datei und eine Reihe von xsd mit den Typen Definitionen übergeben. Ich habe keine Ahnung, ob sie aus einem WCF-Dienst erstellt wurden (ich vermute wegen des Split-Out-Formats), aber ich muss einen WCF-Dienst erstellen, der den Vertrag implementiert.

Frage: Wie bekomme ich die Servicevertragsschnittstelle?

Ich weiß über wsdl.exe und svcutil.exe - aber nicht zu gut mit was ist was. Ich denke, danach bleibt nur noch der Servicevertrag.

Jede Hilfe wird geschätzt!

P.S. Ich hatte eine andere Frage, aber ich habe versucht, zu viele Sachen in die gleiche Frage zu stellen - also lass es uns jetzt einfach machen.

Antwort

13

Sie haben zwei Möglichkeiten:

Option 1: Verwenden Sie das svcutil.exe Dienstprogramm auf der Kommandozeile. Es sollte in Ihrem Verzeichnis C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin installiert werden (oder etwas ähnliches, je nach Maschine und Betriebssystem, die Sie haben)

Verwenden Sie Svcutil -? für die Liste aller vielen Parameter. Im Grunde genommen in seiner einfachsten Form verwenden:

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

und das wird eine entsprechende (name of your service).cs C# Datei mit dem Service und Datenverträge und eine Beispiel-Konfigurationsdatei erstellen.

Die resultierende * .cs-Datei (oder * .vb, wenn Sie VB.NET wollen) enthält den Servicevertrag (die Methoden, die aus der WSDL resultieren) und die Datenverträge (der Datenteil, der vom XSD kommt) für Ihre Dienstleistung.

Option 2: Verwenden Sie die "Dienstverweis hinzufügen" -Dialog in Visual Studio (auf den "Referenzen" Knoten in Ihrer Solution Explorer) und nur die Dateinamen Ihrer WSDL-Datei eingeben:

Add Service Reference dialog

Dies wird eine Service-Referenz erstellen, die im Grunde die gleiche wie die Ausgabe von svcutil.exe Dienstprogramm - plus ein paar Hilfsklassen und Dateien für Visual Studio ist.

Leider wird der Import in beiden Fällen eine schrecklich überladene Konfigurationsdatei erstellen, was wahrscheinlich einer der Gründe ist, warum viele Programmierer denken, dass WCF furchtbar kompliziert ist - das ist es wirklich nicht, aber diese beiden Import-Tools machen einfach einen horrenden Job auf das Erstellen der Grundkonfiguration für Sie .... Lassen Sie sich davon nicht abschrecken!

Wenn die Add Service Reference für die WSDL nicht automatisch alle relevanten und notwendigen XSD-Dateien konvertiert, müssen Sie diese möglicherweise zu Ihrem Projekt hinzufügen und diese dann mit XSD2Code in C# (oder VB.NET) konvertieren) Klassen für Sie. Das wsdl.exe ist das veraltete Dienstprogramm, um eine WSDL-Datei in einen ASMX-Stub (ASP.NET-Webdienst) zu konvertieren. Verwenden Sie diesen nicht mehr, verwenden Sie svcutil.exe oder Visual Studio Add Service Reference für WCF.

Wie Sie eine ordnungsgemäße und minimale WCF-Konfiguration erstellen können, sehen Sie sich die DotNet Rocks TV Show # 122 mit Miguel Castro mit dem Titel Extreme WCF an. Miguel stellt eine großartige Möglichkeit dar, um deine WCF-Projekte zu strukturieren und genau so viele Konfigurationen zu erstellen, wie es wirklich benötigt wird (und daher viel besser verstanden werden kann als das von svcutil erzeugte Chaos).

+0

danke für die hilfe! - aus rätseln hatte ich schon mit dem add reference versucht, zu meiner überraschung erschien keine schnittstelle, nur ein paar klassen (laut spec mit der wsdl). Auch - in Bezug auf die Konfigurationsdatei - kann ich es einfach wegwerfen und einen neuen Dienst starten, der den Servicevertrag implementiert und die Datentypen einbezieht? – JohnIdol

+0

@JohnIdol: sicher, Sie können die Config werfen und dann neu erstellen, was Sie selbst benötigt. Keine schlechte Idee :-) Normalerweise, wenn Sie Service-Ref. Hinzufügen, sollten Sie eine Menge von Klassen erhalten, aber in einer der Dateien sollte irgendwo eine Schnittstelle sein, auf der Sie Ihre Service-Implementierung aufbauen können. –

+0

@marc_s: Ich glaube, ich ging mit "Web-Referenz hinzufügen" (verwendet den localhost) - und nicht "Service-Referenz hinzufügen", wenn ich das letzte Mal versuchte. Würde das einen Unterschied machen, wenn die Schnittstelle nicht angezeigt wird? ;) – JohnIdol

Verwandte Themen