Unterschied zwischen einer SOAP-Nachricht und einer WSDL?

Lesezeit: 11 Minuten

Benutzer-Avatar
James

Ich bin verwirrt darüber, wie SOAP-Nachrichten und WSDL zusammenpassen? Ich habe begonnen, mich mit SOAP-Nachrichten zu befassen, wie zum Beispiel:

    POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

Sind alle SOAP-Nachrichten WSDLs? Ist SOAP ein Protokoll, das seine eigenen „SOAP-Nachrichten“ oder „WSDLs“ akzeptiert? Wenn sie unterschiedlich sind, wann sollte ich dann SOAP-Nachrichten und wann WSDL-Nachrichten verwenden?

Eine Klarstellung in dieser Hinsicht wäre großartig.

  • Eine wsdl ist eine Spezifikation, welche Nachrichten gesendet werden können und was als Antwort erwartet werden kann. In gewissem Sinne ist das wsdl-Dokument für die Soap-Kommunikation nicht erforderlich, aber es ist ein erforderliches Element gemäß dem Protokoll.

    – troelskn

    26. Januar 2013 um 20:08 Uhr

Pro Anfrage wird ein SOAP-Dokument gesendet. Nehmen wir an, wir wären ein Buchladen und hätten einen Remote-Server, den wir abgefragt haben, um den aktuellen Preis eines bestimmten Buchs zu erfahren. Angenommen, wir müssten den Titel des Buchs, die Seitenzahl und die ISBN-Nummer an den Server weitergeben.

Wann immer wir den Preis wissen wollten, schickten wir eine eindeutige SOAP-Nachricht. Es würde ungefähr so ​​​​aussehen;

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPrice xmlns:m="http://namespaces.my-example-book-info.com">
      <ISBN>978-0451524935</ISBN>
      <Title>1984</Title>
      <NumPages>328</NumPages>
    </m:GetBookPrice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

Und wir erwarten, dass wir eine SOAP-Antwortnachricht wie folgt zurückbekommen:

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPriceResponse xmlns:m="http://namespaces.my-example-book-info.com">
      <CurrentPrice>8.99</CurrentPrice>
      <Currency>USD</Currency>
    </m:GetBookPriceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Die WSDL beschreibt dann, wie diese Nachricht behandelt/verarbeitet wird, wenn ein Server sie empfängt. In unserem Fall beschreibt es, welche Typen Title, NumPages & ISBN wären, ob wir eine Antwort von der GetBookPrice-Nachricht erwarten sollten und wie diese Antwort aussehen sollte.

Die Typen würden so aussehen;

<wsdl:types>

  <!-- all type declarations are in a chunk of xsd -->
  <xsd:schema targetNamespace="http://namespaces.my-example-book-info.com"
    xmlns:xsd="http://www.w3.org/1999/XMLSchema">

    <xsd:element name="GetBookPrice">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="ISBN" type="string"/>
          <xsd:element name="Title" type="string"/>
          <xsd:element name="NumPages" type="integer"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="GetBookPriceResponse">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="CurrentPrice" type="decimal" />
          <xsd:element name="Currency" type="string" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

  </xsd:schema>
</wsdl:types>

Aber die WSDL enthält auch weitere Informationen darüber, welche Funktionen miteinander verknüpft sind, um Operationen durchzuführen, und welche Operationen im Dienst verfügbar sind und wo Sie in einem Netzwerk auf den Dienst/die Operationen zugreifen können.

Siehe auch W3 kommentierte WSDL-Beispiele

  • Wenn Sie diese Zeile sagen “Die WSDL beschreibt dann, wie diese Nachricht behandelt/verarbeitet wird, wenn ein Server sie empfängt.” Glaubst du nicht, dass hier etwas nicht stimmt? Ich denke, WSDL ist eher für den Client gedacht, um zu wissen, welche Dienste dem Client zur Verfügung gestellt werden. Ich glaube nicht, dass es die Handhabung oder Verarbeitung von Nachrichten an den Server leitet. Mache ich Sinn?

    – Unzerbrechlich

    5. Juli 2015 um 13:13 Uhr


Benutzer-Avatar
Matthew

Eine SOAP-Nachricht ist ein XML-Dokument, das zur Übertragung Ihrer Daten verwendet wird. WSDL ist ein XML-Dokument, das beschreibt, wie Sie eine Verbindung zu Ihrem Webdienst herstellen und Anfragen stellen.

Grundsätzlich sind SOAP-Nachrichten die Daten, die Sie übertragen, WSDL sagt Ihnen, was Sie tun können und wie Sie die Anrufe tätigen.

Eine schnelle Suche in Google wird viele Quellen für zusätzliche Lektüre ergeben (der vorherige Buchlink ist jetzt tot, um dies zu bekämpfen, werden alle neuen Empfehlungen in Kommentare gesetzt).

Nur zu deinen konkreten Fragen:

Sind alle SOAP-Nachrichten WSDLs? Nein, sie sind überhaupt nicht dasselbe.

Ist SOAP ein Protokoll, das seine eigenen „SOAP-Nachrichten“ oder „WSDLs“ akzeptiert? Nein – Lektüre erforderlich, da dies weit weg ist.

Wenn sie unterschiedlich sind, wann sollte ich dann SOAP-Nachrichten und wann WSDL-Nachrichten verwenden? Soap ist eine Struktur, die Sie auf Ihre Nachricht/Daten zur Übertragung anwenden. WSDLs werden nur verwendet, um zu bestimmen, wie der Dienst überhaupt aufgerufen wird. Oft ist dies eine einmalige Sache, wenn Sie zum ersten Mal Code hinzufügen, um einen bestimmten Webdienst aufzurufen.

  • Ich bin verwirrt, was Sie mit einer “einmaligen Sache” meinen, wenn Sie mit einigen Beispielnachrichten näher darauf eingehen könnten, was großartig wäre. Sie sagen also auch, dass WSDL- und SOAP-Nachrichten zusammen verwendet werden?

    – James

    27. Januar 2013 um 19:31 Uhr

  • WSDL sagt Ihnen, wie Sie den Webservice aufrufen. Häufig verwenden Sie die WSDL, um den Code zum Aufrufen des Webdiensts automatisch zu generieren, und verwenden ihn dann nie wieder. Das Überfliegen der Kapitel in dem von mir verlinkten Buch sollte helfen.

    – Matthew

    27. Januar 2013 um 19:39 Uhr


Wir müssen definieren, was ein Webdienst ist, bevor wir sagen, was der Unterschied zwischen SOAP und WSDL ist, wobei die beiden (SOAP und WSDL) Komponenten eines Webdienstes sind

Die meisten Anwendungen werden entwickelt, um mit Benutzern zu interagieren, der Benutzer gibt Daten über eine Schnittstelle ein oder sucht nach Daten, und die Anwendung antwortet dann auf die Eingabe des Benutzers.

Ein Webdienst macht mehr oder weniger dasselbe, außer dass eine Webdienstanwendung nur von Maschine zu Maschine oder von Anwendung zu Anwendung kommuniziert. Häufig findet keine direkte Benutzerinteraktion statt.

Ein Webdienst ist im Grunde eine Sammlung offener Protokolle, die zum Austausch von Daten zwischen Anwendungen verwendet werden. Die Verwendung offener Protokolle ermöglicht die Plattformunabhängigkeit von Webdiensten. Software, die in unterschiedlichen Programmiersprachen geschrieben ist und auf unterschiedlichen Plattformen läuft, kann Webdienste verwenden, um Daten über Computernetzwerke wie das Internet auszutauschen. Mit anderen Worten, Windows-Anwendungen können mit PHP-, Java- und Perl-Anwendungen und vielen anderen kommunizieren, was unter normalen Umständen nicht möglich wäre.

Wie funktionieren Webdienste?

Da verschiedene Anwendungen in verschiedenen Programmiersprachen geschrieben sind, können sie oft nicht miteinander kommunizieren. Ein Webdienst ermöglicht diese Kommunikation durch die Verwendung einer Kombination aus offenen Protokollen und Standards, hauptsächlich XML, SOAP und WSDL. Ein Webdienst verwendet XML zum Markieren von Daten, SOAP zum Übertragen einer Nachricht und schließlich WSDL zum Beschreiben der Verfügbarkeit von Diensten. Werfen wir einen Blick auf diese drei Hauptkomponenten einer Webdienstanwendung.

Einfaches Objektzugriffsprotokoll (SOAP)

Das Simple Object Access Protocol oder SOAP ist ein Protokoll zum Senden und Empfangen von Nachrichten zwischen Anwendungen, ohne dass Interoperabilitätsprobleme auftreten (Interoperabilität bedeutet, dass die Plattform, auf der ein Webdienst ausgeführt wird, irrelevant wird). Ein weiteres Protokoll mit ähnlicher Funktion ist HTTP. Es wird verwendet, um auf Webseiten zuzugreifen oder im Internet zu surfen. HTTP stellt sicher, dass Sie sich keine Gedanken darüber machen müssen, welche Art von Webserver – ob Apache oder IIS oder irgendein anderer – Ihnen die angezeigten Seiten zur Verfügung stellt oder ob die angezeigten Seiten in ASP.NET oder HTML erstellt wurden.

Da SOAP sowohl zum Anfordern als auch zum Antworten verwendet wird, variiert sein Inhalt je nach Zweck leicht.

Unten sehen Sie ein Beispiel für eine SOAP-Anforderung und -Antwortnachricht

SOAP-Anfrage:

POST /InStock HTTP/1.1 
Host: www.bookshop.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 
<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body xmlns:m="http://www.bookshop.org/prices"> 
    <m:GetBookPrice> 
    <m:BookName>The Fleamarket</m:BookName> 
    </m:GetBookPrice> 
</soap:Body> 
</soap:Envelope>

SOAP-Antwort:

POST /InStock HTTP/1.1 
Host: www.bookshop.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 
<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body xmlns:m="http://www.bookshop.org/prices"> 
    <m:GetBookPriceResponse> 
    <m: Price>10.95</m: Price> 
    </m:GetBookPriceResponse> 
</soap:Body> 
</soap:Envelope> 

Obwohl beide Nachrichten gleich aussehen, führen sie unterschiedliche Methoden aus. Wenn Sie sich beispielsweise die obigen Beispiele ansehen, können Sie sehen, dass die anfordernde Nachricht die verwendet GetBookPrice Methode, um den Buchpreis zu erhalten. Die Rückmeldung erfolgt durch die GetBookPriceResponse -Methode, die die Nachricht sein wird, die Sie als “Anforderer” sehen werden. Sie können auch sehen, dass die Nachrichten mithilfe von XML erstellt werden.

Web Services Description Language oder WSDL

WSDL ist ein Dokument, das einen Webdienst beschreibt und Ihnen auch erklärt, wie Sie auf seine Methoden zugreifen und diese verwenden.

WSDL kümmert sich darum, woher Sie wissen, welche Methoden in einem Webdienst verfügbar sind, über den Sie im Internet stolpern.

Sehen Sie sich eine Beispiel-WSDL-Datei an:

<?xml version="1.0" encoding="UTF-8"?> 
<definitions  name ="DayOfWeek"  
  targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"  
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://schemas.xmlsoap.org/wsdl/">  
  <message name="DayOfWeekInput"> 
    <part name="date" type="xsd:date"/> 
  </message> 
  <message name="DayOfWeekResponse"> 
    <part name="dayOfWeek" type="xsd:string"/> 
  </message> 
  <portType name="DayOfWeekPortType"> 
    <operation name="GetDayOfWeek"> 
      <input message="tns:DayOfWeekInput"/> 
      <output message="tns:DayOfWeekResponse"/> 
    </operation> 
  </portType> 
  <binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType"> 
    <soap:binding style="document"  
      transport="http://schemas.xmlsoap.org/soap/http"/> 
    <operation name="GetDayOfWeek"> 
      <soap:operation soapAction="getdayofweek"/> 
      <input> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"  
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"   
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
    </operation> 
  </binding> 
  <service name="DayOfWeekService" > 
    <documentation> 
      Returns the day-of-week name for a given date 
    </documentation> 
    <port name="DayOfWeekPort" binding="tns:DayOfWeekBinding"> 
      <soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/> 
    </port> 
  </service> 
</definitions> 

Die wichtigsten Dinge, an die Sie sich bei einer WSDL-Datei erinnern sollten, sind, dass sie Ihnen Folgendes bietet:

  • Eine Beschreibung eines Webdienstes

  • Die Methoden, die ein Webdienst verwendet, und die Parameter, die er akzeptiert

  • Eine Möglichkeit, Webdienste zu finden
    • Konkrete Beschreibung

      – TapanHP

      27. August 2018 um 7:21 Uhr

    Eine WSDL (Web Service Definition Language) ist eine Metadatendatei, die den Webdienst beschreibt.

    Dinge wie Operationsname, Parameter etc.

    Die Soap-Nachrichten sind die eigentlichen Payloads

    Bessere Analogie als das Telefonat: Produkte per Post bei einem Versanddienstleister bestellen. Das WSDL-Dokument ist wie die Anweisungen, die erklären, wie die Art von Bestellformularen erstellt wird, die der Dienstanbieter akzeptiert. Eine SOAP-Nachricht ist wie ein Umschlag mit einem Standarddesign (Größe, Form, Aufbau), mit dem jedes Postamt auf der ganzen Welt umzugehen weiß. In einen solchen Umschlag stecken Sie Ihr Bestellformular. Das Netz (z. B. das Internet) ist die Post. Du legst deinen Umschlag in die Post. Die Mitarbeiter der Post schauen nicht in den Umschlag. Die Nutzdaten-XML ist das Bestellformular, das Sie dem Umschlag beigelegt haben. Nachdem das Postamt den Umschlag geliefert hat, öffnet der Webdienstanbieter den Umschlag und verarbeitet das Bestellformular. Wenn Sie das Formular korrekt erstellt und ausgefüllt haben, senden sie Ihnen das bestellte Produkt per Post zurück.

    In einfachen Worten, wenn Sie einen Webdienst von Taschenrechner haben. WSDL informiert über die Funktionen, die Sie implementieren oder für den Client verfügbar machen können. Zum Beispiel: addieren, löschen, subtrahieren und so weiter. Wo Sie mit SOAP tatsächlich Aktionen wie doDelete(), doSubtract(), doAdd() ausführen. SOAP und WSDL sind also Äpfel und Birnen. Wir sollten sie nicht vergleichen. Beide haben ihre eigene unterschiedliche Funktionalität.

    Benutzer-Avatar
    Arun Kumar

    SOAP: Es ist ein offenes Standard-XML-basiertes Kommunikationsprotokoll, das verwendet wird, um Informationen vom Benutzer zum Webdienst oder umgekehrt auszutauschen. Die Seife ist nur das Dokument, in dem die Daten auf irgendeine Weise organisiert sind. Für jede Anfrage und Antwort kann eine separate Seife vorhanden sein.

    WSDL: In Soap werden die Daten auf irgendeine Weise organisiert und diese Organisation wird in WSDL angegeben. Der zu verwendende Datentyp wird hier ebenfalls angegeben. Für Request und Response ist eine einzige WSDL vorhanden

    1300680cookie-checkUnterschied zwischen einer SOAP-Nachricht und einer WSDL?

    This website is using cookies to improve the user-friendliness. You agree by using the website further.

    Privacy policy