So generieren Sie eine Dienstreferenz nur mit einer physischen WSDL-Datei

122

Ich habe jahrelang Webdienste erstellt und verwendet und war immer in der Lage, mit Visual Studio eine Dienstreferenz vom Client zu erstellen. Ich habe einen Drittanbieter-Service, mit dem ich arbeiten muss, und sie weigern sich, ihre Sicherheit zu öffnen, damit ich die WSDL sehen und die Service-Referenz erstellen kann. Es ist ein öffentlich zugänglicher Dienst, daher sehe ich keine Notwendigkeit für dieses Sicherheitsniveau, aber es ist das, was es ist.

Ich weiß, dass dies eine n00b-Frage ist, und ich schäme mich, sie zu stellen. Aber wie erstelle ich die entsprechenden Service-Referenzinformationen in meinem Client, wenn mir nur eine physische Kopie der WSDL zur Verfügung steht, die der Client mir per E-Mail gesendet hat? Die web.config ändert sich, die Objektschicht über den SOAP-Daten usw. Genau wie bei einer automatisierten Dienstreferenz möchte ich nur eine Verbindung zum Dienst herstellen und ihn mit den definierten Objekten verwenden.

Der Drittanbieter-Service ist, soweit ich das beurteilen kann, nicht WCF, sondern SOAP. Ich benutze übrigens VS 2010. Vielen Dank im Voraus, Ken

kfoster
quelle

Antworten:

180

Dies kann die einfachste Methode sein

  • Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie "Servicereferenz hinzufügen ...".
  • Geben Sie im Feld Adresse: den physischen Pfad (C: \ test \ project ....) der heruntergeladenen / geänderten WSDL ein.
  • Hit Go
Ameise Radha
quelle
11
Wenn Sie "Als Pfad kopieren" verwenden, entfernen Sie die Anführungszeichen.
O. Jones
Beim Speichern der WSDL zur Weitergabe an eine andere Person gab mir die "Quellquelle" der WSDL aus dem Webservice in Chrome eine funktionierende WSDL, während IE11 dies nicht tat. YMMV.
Erzengel76
68

Es gibt zwei Möglichkeiten, dies zu tun. Sie können entweder die IDE verwenden, um eine WSDL zu generieren, oder Sie können dies über die Befehlszeile tun.

1. So erstellen Sie es über die IDE:

Klicken Sie im Lösungs-Explorer-Bereich mit der rechten Maustaste auf das Projekt, zu dem Sie den Service hinzufügen möchten:

Geben Sie hier die Bildbeschreibung ein

Anschließend können Sie den Pfad zu Ihrer Service-WSDL eingeben und auf Los klicken:

Geben Sie hier die Bildbeschreibung ein

2. So erstellen Sie es über die Befehlszeile:

Öffnen Sie eine VS 2010-Eingabeaufforderung (Programme -> Visual Studio 2010 -> Visual Studio-Tools).
Führen Sie dann Folgendes aus:

WSDL /verbose C:\path\to\wsdl

WSDL.exe gibt dann eine CS-Datei für Ihren Verbrauch aus.

Wenn Sie andere Abhängigkeiten haben, die Sie mit der Datei erhalten haben, z. B. xsds, fügen Sie diese der Argumentliste hinzu:

WSDL /verbose C:\path\to\wsdl C:\path\to\some\xsd C:\path\to\some\xsd

Wenn Sie einen VB-Ausgang benötigen, verwenden Sie /language:VBzusätzlich zu /verbose.

Lynn bröckelt
quelle
Ich bekomme 'Bindung' blah 'kann nicht aus dem Namespace' blahURL 'importiert werden und Operation' SomeRequest 'kann nicht importiert werden. Das Element' xxx 'fehlt. Bedeutet das, dass sie mir weitere Support-Dateien geben müssen oder dass ihre Sicherheit so verdammt gesperrt ist, dass ich nichts tun kann?
Kfoster
Es klingt sicherlich so, als ob Ihnen Abhängigkeiten fehlen. Öffnen Sie die WSDL und schauen Sie nach oben. Wenn Sie Zeilen mit einem importin gefolgt von einem schemaLocation sehen, das auf einen xsd-Pfad verweist, benötigen Sie auch diese xsd-Dateien.
Lynn Crumbling
Danke für die Antwort. Ich habe eine ausstehende E-Mail mit dem Kunden, um zu sehen, ob ich die erforderlichen xsd-Importe erhalten kann. Es ist jedoch so frustrierend, wenn ich es richtig mache, füge ich einfach eine URL in den ServiceReference-Dialog ein, drücke einen Knopf und bratsche! Ich bin ungefähr 3 Codezeilen vom Aufrufen einer Dienstmethode entfernt. Der gesamte Vorgang dauert ca. 5 Minuten. Aber ich arbeite seit Wochen mit diesem Client zusammen und habe keine Ahnung, warum ihre Sicherheitsleute keinen Zugriff auf Service-Definitionen über das Web ermöglichen.
Kfoster
Das ist rau. Ich warte gerade auf eine VPN-Verbindung für ein Projekt. Glücklicherweise gaben sie mir die wsdl und die dazugehörigen xsd-Dokumente im Voraus. Sie haben diese Importe also in der WSDL gefunden?
Lynn Crumbling
Ja. Es stellte sich heraus, dass sie mir für 4 Dienste wsdl's für 2 von ihnen und xsd's für die anderen 2 gegeben haben, also keinen vollständigen Satz von Dateien für einen der Dienste. Aber ich habe endlich xsd's bekommen und konnte .cs-Dateien für 2 der Dienste generieren, die anderen 2 werden folgen, nehme ich an. Vielen Dank.
Kfoster