So verwenden Sie eine WSDL

126

Ich muss einen Webdienst nutzen. Sie haben mir die WSDL-Datei geschickt. Was soll ich tun, um es meiner Website hinzuzufügen und es als Proxy zu verwenden? (Wenn ich es in ein virtuelles Verzeichnis stelle, kann es entdeckt werden, aber gewährt es mir die Verbindung mit dem realen Webdienst?)

jmayor
quelle
9
Nun, ich habe positiv gestimmt, weil es eine Frage ist, auf die andere Benutzer hier von einer Antwort profitieren würden. Ich habe genau nach diesem Problem gesucht und bin froh, dass ich es hier gefunden habe.
schizoid04

Antworten:

138

Ich würde Visual Studio starten, ein Webprojekt erstellen (oder eine Konsolen-App - spielt keine Rolle).

Für .Net Standard:

  1. Ich würde auf dem Projekt der rechte Maustaste und „Dienstverweis hinzufügen“ aus dem Pick Hinzufügen Kontextmenü.
  2. Ich würde auf Erweitert klicken und dann auf Dienstreferenz hinzufügen klicken.
  3. Ich würde den vollständigen Dateipfad der WSDL erhalten und in die Adressleiste einfügen. Feuern Sie dann den Pfeil ab (Go-Taste).
  4. Wenn beim Laden der Datei ein Fehler auftritt, muss eine fehlerhafte und ungelöste URL vorhanden sein, die die Datei wie unten gezeigt auflösen muss: Geben Sie hier die Bildbeschreibung ein Informationen zum Beheben finden Sie in dieser Antwort: Stackoverflow-Antwort auf: Dienstreferenz für kann nicht erstellt werden WSDL-Datei

Wenn kein Fehler auftritt, sollten Sie einfach den NameSpace festlegen, den Sie für den Zugriff auf den Dienst verwenden möchten. Dieser wird dann für Sie generiert.

Für .Net Core

  1. Ich würde mit der rechten Maustaste auf das Projekt klicken und Connected Service aus dem Kontextmenü Hinzufügen auswählen.
  2. Ich würde Microsoft WCF Web Service Reference Provider aus der Liste auswählen.
  3. Ich würde auf Durchsuchen klicken und sofort die WSDL-Datei auswählen. Den Namespace festlegen und los geht's. Lesen Sie die obige Fehlerbehebungs-URL, wenn Sie auf einen Fehler stoßen.

Jede der oben genannten Methoden generiert einen einfachen, sehr einfachen WCF-Client, den Sie verwenden können. Sie sollten im generierten Code eine "YourservicenameClient" -Klasse finden.

Zu Referenzzwecken befindet sich die generierte cs-Datei in Ihrem Obj / debug (oder release) / XsdGeneratedCode, und Sie finden die DLLs weiterhin im TempPE-Ordner.

Die erstellten Dienste sollten Methoden für jede der im WSDL-Vertrag definierten Methoden haben.

Instanziieren Sie den Client und rufen Sie die Methoden auf, die Sie aufrufen möchten - das ist alles, was es gibt!

YourServiceClient client = new YourServiceClient();
client.SayHello("World!");

Wenn Sie die Remote-URL angeben müssen (nicht die standardmäßig erstellte), können Sie dies einfach im Konstruktor des Proxy-Clients tun:

YourServiceClient client = new YourServiceClient("configName", "remoteURL");

Wo configNameist der Name des zu verwendenden Endpunkts (Sie werden alle Einstellungen außer der URL verwenden), und dies remoteURList eine Zeichenfolge, die die URL darstellt, zu der eine Verbindung hergestellt werden soll (anstelle der in der Konfiguration enthaltenen).

marc_s
quelle
Das funktioniert gut. Nur eine Frage, ob ich die wsdl-Datei auf meinem Computer habe und den Verweis auf diese Datei hinzufüge. Wenn Sie die URL ausführen, ist dies derjenige, der den Webdienst hostet, oder muss ich die Bindung und den Endpunkt angeben?
jmayor
1
Das liegt bei Ihnen - standardmäßig enthält der für den Client-Proxy erstellte Code die URL, die in der WSDL enthalten ist. Wenn Sie zu einer anderen URL wechseln müssen, müssen Sie diese selbst angeben.
marc_s
Warum ist das so einfach? Gibt es keinen Haken? : p Danke!
Odys
1
Als akzeptierte Antwort wäre es gut, wenn Sie auch erwähnen würden, wie eine im Internet gehostete WSDL auch über eine URL verwendet wird.
Caltor
Ich denke, ich bin ziemlich nah dran, dies zum Laufen zu bringen. Ich habe den Webdienst mit dem Tool "Dienstreferenz hinzufügen" installiert. Ich kann den Client instanziieren, aber beim Aufrufen der Methoden scheitere ich. Der Endpunkt ist die Verwendung einer Java-Implementierung, und alles, was ich sehen kann, ist das XML. Die Methode, die ich aufzurufen versuche, sucht nach einer Client-ID und "etwas anderem". Das etwas anderes ist eine Klasse. Welches ist rätselhaft. Ich kann dies in einen Beitrag unten einfügen, wenn das helfen würde, aber ich bin verblüfft.
Mappingman
45

Im visuellen Studio.

  • Erstellen oder öffnen Sie ein Projekt.
  • Klicken Sie im Solution Explorer mit der rechten Maustaste auf das Projekt.
  • Wählen Sie "Service-Referenz hinzufügen".
  • Fügen Sie die Adresse in die WSDL ein, die Sie erhalten haben.
  • OK klicken.

Wenn keine Fehler vorliegen, sollten Sie die Dienstreferenz im Objektbrowser und alle zugehörigen Methoden anzeigen können.

vidalsasoon
quelle
9
<3 Visual Studio .. Ja, es ist wirklich so einfach :)
cwap
3
Das OP hat keine Adresse, sondern eine Datei.
Henk Holterman
1
Der Anbieter des Webdienstes hat möglicherweise WSDL (Security by Obscurity) deaktiviert. Daher gibt es keine URL, über die auf WSDL zugegriffen werden kann, und das Hinzufügen einer Webreferenz in VS funktioniert nicht. Der Anbieter möchte jedoch, dass SIE (ich meine OP) alles wissen, was Sie über den Servicevertrag wissen müssen. Deshalb haben sie die WSDL-Datei gesendet. Jetzt muss das OP den Proxy-Code daraus generieren, die Frage ist, wie.
Azheglov
3
Durch Eingabe des Pfads zur Datei. Warum denkst du, dass das nicht funktioniert?
John Saunders
1
Hallo @vidalsasoon. Können Sie kurz erklären, wie ich diese Klassen verwende, die ich in meinem Klassen-Explorer sehe? ?
CalZone
16

Verwenden Sie das Dienstprogramm WSDL.EXE , um einen Webdienst-Proxy aus WSDL zu generieren.

Sie erhalten eine lange C # -Quelldatei, die eine Klasse enthält, die folgendermaßen aussieht:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MyService", Namespace="http://myservice.com/myservice")]
public partial class MyService : System.Web.Services.Protocols.SoapHttpClientProtocol {
    ...
}

In Ihrem clientseitigen Code, der Webdienste verbraucht:

  1. Instanziieren Sie MyService.
  2. Legen Sie die URL-Eigenschaft fest
  3. Webmethoden aufrufen
Azheglov
quelle
5
Dies schafft einen "alten" ASMX-Webservice - diese sind veraltet - man sollte heutzutage stattdessen WCF verwenden
marc_s
7

Wenn Sie eine WSDL-Referenz in ein .Net Core- Projekt einfügen möchten , gibt es keine Option " Webreferenz hinzufügen ".

Um die WSDL-Referenz hinzuzufügen, gehen Sie zum Projektmappen-Explorer, klicken Sie mit der rechten Maustaste auf das Projektelement Referenzen und klicken Sie dann auf die Option Verbundenen Dienst hinzufügen .

Geben Sie hier die Bildbeschreibung ein

Klicken Sie dann auf "Microsoft WCF-Webdienstreferenz":

Geben Sie hier die Bildbeschreibung ein

Geben Sie den Dateipfad in das URI-Textfeld ein und importieren Sie die WSDL:

Geben Sie hier die Bildbeschreibung ein

Es wird ein einfacher, sehr einfacher WCF-Client generiert, und Sie können ihn folgendermaßen verwenden:

YourServiceClient client = new YourServiceClient();
client.DoSomething();
Nedzad G.
quelle