Unterschied zwischen einer SOAP-Nachricht und einer WSDL?


102

Ich bin verwirrt darüber, wie SOAP-Nachrichten und WSDL zusammenpassen. Ich habe angefangen, SOAP-Nachrichten zu untersuchen, 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 SOAP-Nachrichten verwenden und wann sollte ich WSDLs verwenden?

Eine Klarstellung darüber wäre großartig.


1
Eine WSDL ist eine Spezifikation, welche Nachrichten gesendet werden können und was als Antwort erwartet werden kann. Sinnvollerweise ist das WSDL-Dokument für die Seifenkommunikation nicht erforderlich, aber es ist ein erforderliches Element gemäß dem Protokoll.
Troelskn

Antworten:


121

Pro Anfrage wird ein SOAP-Dokument gesendet. Angenommen, wir waren ein Buchladen und hatten einen Remote-Server, den wir abgefragt haben, um den aktuellen Preis eines bestimmten Buches zu erfahren. Angenommen, wir müssen den Titel des Buches, die Anzahl der Seiten und die ISBN-Nummer an den Server übergeben.

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 eine SOAP-Antwortnachricht wie folgt;

<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 wird beschrieben, welche Typen Titel, NumPages und 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>

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

Siehe auch W3 Annotated WSDL-Beispiele


4
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 mehr für den Kunden, um zu wissen, welche Dienste für den Kunden verfügbar sind. Ich glaube nicht, dass es die Verarbeitung oder Verarbeitung von Nachrichten an den Server steuert. Mache ich Sinn?
Unbreakable

76

Eine SOAP-Nachricht ist ein XML-Dokument, mit dem Ihre Daten übertragen werden. WSDL ist ein XML-Dokument, in dem beschrieben wird, wie Sie eine Verbindung herstellen und Anforderungen an Ihren Webdienst stellen.

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

Eine schnelle Suche in Google liefert viele Quellen für zusätzliche Lektüre (der vorherige Buchlink ist jetzt tot, um dem entgegenzuwirken, werden neue Empfehlungen in die Kommentare aufgenommen).

Ich notiere nur Ihre spezifischen Fragen:

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

Ist SOAP ein Protokoll, das seine eigenen SOAP-Nachrichten oder WSDLs akzeptiert? Kein Lesen erforderlich, da dies weit entfernt ist.

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


Ich bin verwirrt, was Sie unter einer "einmaligen Sache" verstehen, wenn Sie mit einigen Beispielnachrichten arbeiten könnten, die fantastisch wären. Sie sagen also auch, dass WSDL- und SOAP-Nachrichten zusammen verwendet werden?
James

6
In WSDL erfahren Sie, wie Sie den Webdienst aufrufen. Häufig verwenden Sie die WSDL, um den Code zum Aufrufen des Webdienstes automatisch zu generieren und ihn dann nie wieder zu verwenden. Das Überfliegen der Kapitel in dem Buch, das ich verlinkt habe, sollte helfen.
Matthew

27

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

Dinge wie Operationsname, Parameter usw.

Die Seifenmeldungen sind die tatsächlichen Nutzlasten


25

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

Die meisten Anwendungen wurden für die Interaktion mit Benutzern entwickelt. Der Benutzer gibt Daten über eine Schnittstelle ein oder sucht nach Daten. Die Anwendung reagiert dann auf die Eingaben 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. Es gibt oft keine direkte Benutzerinteraktion.

Ein Webdienst ist im Grunde eine Sammlung offener Protokolle, die zum Datenaustausch zwischen Anwendungen verwendet werden. Durch die Verwendung offener Protokolle können Webdienste plattformunabhängig sein. Software, die in verschiedenen Programmiersprachen geschrieben ist und auf verschiedenen Plattformen ausgeführt wird, kann mithilfe von Webdiensten Daten über Computernetzwerke wie das Internet austauschen. 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 häufig nicht miteinander kommunizieren. Ein Webdienst ermöglicht diese Kommunikation mithilfe einer Kombination aus offenen Protokollen und Standards, hauptsächlich XML, SOAP und WSDL. Ein Webdienst verwendet XML zum Kennzeichnen von Daten, SOAP zum Übertragen einer Nachricht und schließlich WSDL zum Beschreiben der Verfügbarkeit von Diensten. Schauen wir uns diese drei Hauptkomponenten einer Webdienstanwendung an.

SOAP (Simple Object Access Protocol)

Das Simple Object Access Protocol oder SOAP ist ein Protokoll zum Senden und Empfangen von Nachrichten zwischen Anwendungen, ohne auf Interoperabilitätsprobleme zu stoßen (Interoperabilität bedeutet, dass die Plattform, auf der ein Webdienst ausgeführt wird, irrelevant wird). Ein anderes Protokoll, das eine ähnliche Funktion hat, 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 ein anderer - Ihnen die angezeigten Seiten bereitstellt oder ob die angezeigten Seiten in ASP.NET oder HTML erstellt wurden.

Da SOAP sowohl zum Anfordern als auch zum Antworten verwendet wird, variieren die Inhalte je nach Verwendungszweck geringfügig.

Unten finden Sie ein Beispiel für eine SOAP-Anforderungs- 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 GetBookPriceMethode verwendet, um den Buchpreis zu erhalten. Die Antwort wird von der GetBookPriceResponseMethode ausgeführt, die die Nachricht sein wird, die Sie als "Anforderer" sehen werden. Sie können auch sehen, dass die Nachrichten mithilfe von XML erstellt wurden.

Web Services Description Language oder WSDL

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

WSDL kümmert sich darum, woher Sie wissen, welche Methoden in einem Webdienst verfügbar sind, auf den Sie im Internet stoßen.

Schauen 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:

  • Eine Beschreibung eines Webdienstes

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

  • Eine Möglichkeit, Webdienste zu finden


  • Konkrete Beschreibung
    TapanHP

    7

    Bessere Analogie als das Telefonat: Produkte per Post bei einem Versandhändler bestellen. Das WSDL-Dokument entspricht den Anweisungen, in denen erläutert wird, wie die vom Dienstanbieter akzeptierten Bestellformulare erstellt werden. Eine SOAP-Nachricht ist wie ein Umschlag mit einem Standarddesign (Größe, Form, Konstruktion), mit dem jedes Postamt auf der ganzen Welt umgehen kann. Sie legen Ihr Bestellformular in einen solchen Umschlag. Das Netzwerk (zB das Internet) ist der Postdienst. Sie legen Ihren Umschlag in die Post. Die Mitarbeiter der Post schauen nicht in den Umschlag. Das Payload-XML ist das Bestellformular, das Sie dem Umschlag beigefügt haben. Nachdem die Post den Umschlag geliefert hat, öffnet der Webdienstanbieter den Umschlag und verarbeitet das Bestellformular. Wenn Sie das Formular korrekt erstellt und ausgefüllt haben,


    4

    In einfachen Worten, wenn Sie einen Web-Service von Rechner haben. WSDL informiert über die Funktionen, die Sie implementieren oder für den Client verfügbar machen können. Zum Beispiel: Hinzufügen, 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 Orangen. Wir sollten sie nicht vergleichen. Sie haben beide ihre eigenen unterschiedlichen Funktionen.


    1

    SOAP: Es handelt sich um ein offenes Standard-XML-basiertes Kommunikationsprotokoll, mit dem Informationen vom Benutzer an den Webdienst oder umgekehrt ausgetauscht werden. 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 sind die Daten auf irgendeine Weise organisiert und diese Organisation ist in WSDL angegeben. Hier wird auch der Datentyp angegeben, der verwendet werden muss. Für Anfrage und Antwort ist eine einzelne WSDL vorhanden


    0

    Die WSDL ist eine Art Vertrag zwischen dem API-Anbieter und dem Client. Sie beschreibt den Webdienst: die öffentliche Funktion, das optionale / erforderliche Feld ...

    Die Seifennachricht ist jedoch eine Datenübertragung zwischen Client und Anbieter (Nutzlast).


    0

    WSDL fungiert als Schnittstelle zwischen Sender und Empfänger.
    SOAP-Nachricht ist Anforderung und Antwort im XML-Format.

    Vergleich mit Java RMI

    WSDL ist die Schnittstellenklasse.
    SOAP-Nachricht ist eine gemarshallte Anforderungs- und Antwortnachricht.


    -1

    Wir können einen Telefonanruf in Betracht ziehen. Diese Nummer ist wsdl und der Informationsaustausch ist Seife.

    WSDL beschreibt, wie eine Verbindung zum Kommunikationsserver hergestellt wird. SOAP enthält Kommunikationsnachrichten.


    1
    Nein, die Telefonnummer entspricht eher einem der in der WSDL definierten Endpunkte. Im Bereich der Telefonanrufe gibt es kein wirkliches Äquivalent zu WSDL. Das nächstgelegene ist möglicherweise ein Telefonverzeichnis, insbesondere wenn Sie das Konzept einer "Gelben Seite" einschließen, die Unternehmen kategorisiert und einige Details zum Unternehmen enthält (nicht nur die Telefonnummer).
    John Saunders
    Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
    Licensed under cc by-sa 3.0 with attribution required.