SOAP-Webdienste-Tutorial: Was ist das SOAP-Protokoll?
โก Intelligente Zusammenfassung
SOAP (Simple Object Access Protocol) ist ein XML-basiertes Protokoll fรผr den Zugriff auf Webdienste รผber HTTP. Diese Ressource erlรคutert die SOAP-Bausteine, die Nachrichtenstruktur, die Envelope- und Fault-Elemente, das Kommunikationsmodell und ein praktisches Beispiel fรผr einen ASMX-Webdienst.
Was ist SOAP?
SOAP ist ein XML-basiertes Protokoll fรผr den Zugriff auf Webdienste รผber HTTP. Es verfรผgt รผber einige Spezifikationen, die in allen Anwendungen verwendet werden kรถnnen.
SOAP steht fรผr Simple Object Access Protocol, wurde aber spรคter einfach zu SOAP v1.2 abgekรผrzt. SOAP ist ein Protokoll oder, anders ausgedrรผckt, eine Definition dafรผr, wie Webdienste untereinander oder mit Clientanwendungen, die sie aufrufen, kommunizieren.
SOAP wurde als Zwischensprache entwickelt, damit Anwendungen, die auf verschiedenen Programmiersprachen basieren, problemlos miteinander kommunizieren kรถnnen und der extreme Entwicklungsaufwand vermieden wird.
SOAP-Einfรผhrung
In der heutigen Welt gibt es eine Vielzahl von Anwendungen, die auf verschiedenen Programmiersprachen basieren. Beispielsweise kรถnnte eine Webanwendung in โฆ entwickelt worden sein. Java, ein weiteres in .NET und ein weiteres in PHP.
Der Datenaustausch zwischen Anwendungen ist in der heutigen vernetzten Welt von entscheidender Bedeutung. Der Datenaustausch zwischen diesen heterogenen Anwendungen wรคre jedoch komplex. Dies gilt auch fรผr die Komplexitรคt des Codes, der diesen Datenaustausch ermรถglicht.
Eine Methode zur Bekรคmpfung dieser Komplexitรคt besteht darin, XML (Extensible Markup Language) als Zwischensprache fรผr den Datenaustausch zwischen Anwendungen zu verwenden.
Jede Programmiersprache kann die XML-Auszeichnungssprache verstehen. Daher wurde XML als zugrunde liegendes Medium fรผr den Datenaustausch verwendet.
Es gibt jedoch keine einheitlichen Spezifikationen fรผr die Verwendung von XML in allen Programmiersprachen zum Datenaustausch. Hier kommt SOAP-Software ins Spiel.
SOAP wurde fรผr die Arbeit mit XML รผber HTTP entwickelt und verfรผgt รผber eine Art Spezifikation, die in allen Anwendungen verwendet werden kann. In den folgenden Kapiteln werden wir uns das SOAP-Protokoll genauer ansehen.
Vorteile von SOAP
SOAP ist das Protokoll, das fรผr den Datenaustausch zwischen Anwendungen verwendet wird. Nachfolgend sind einige Grรผnde aufgefรผhrt, warum SOAP verwendet wird.
- Wenn entwickelnping Fรผr SOAP-basierte Webdienste benรถtigen Sie eine Sprache, mit der Webdienste mit Clientanwendungen kommunizieren kรถnnen. SOAP ist das ideale Medium, da es genau fรผr diesen Zweck entwickelt wurde. Dieses Protokoll wird auch vom W3C-Konsortium empfohlen, dem Gremium, das alle Webstandards festlegt.
- SOAP ist ein leichtgewichtiges Protokoll, das fรผr den Datenaustausch zwischen Anwendungen verwendet wird. Beachten Sie das Schlรผsselwort 'leichtDa die SOAP-Programmierung auf der XML-Sprache basiert, die selbst eine leichtgewichtige Datenaustauschsprache ist, fรคllt SOAP als Protokoll ebenfalls in dieselbe Kategorie.
- SOAP ist plattform- und betriebssystemunabhรคngig konzipiert. Daher kann das SOAP-Protokoll mit Anwendungen jeder Programmiersprache auf beiden Systemen verwendet werden. Windows und Linux Plattformen.
- Es basiert auf dem HTTP-Protokoll โ SOAP nutzt das HTTP-Protokoll, das Standardprotokoll aller Webanwendungen. Daher sind keine Anpassungen erforderlich, um auf dem SOAP-Protokoll basierende Webdienste im World Wide Web auszufรผhren.
SOAP-Bausteine
Die SOAP-Spezifikation definiert etwas, das als โSOAP-Nachrichtโ, was an den Webdienst und die Client-Anwendung gesendet wird.
Das folgende Diagramm der SOAP-Architektur zeigt die verschiedenen Bausteine โโeiner SOAP-Nachricht.
Die SOAP-Nachricht ist nichts anderes als ein bloรes XML-Dokument, das die folgenden Komponenten enthรคlt.
- An Umschlag Das Element, das das XML-Dokument als SOAP-Nachricht kennzeichnet โ dies ist der umschlieรende Teil der SOAP-Nachricht und dient dazu, alle Details der SOAP-Nachricht zu kapseln. Es handelt sich um das Wurzelelement der SOAP-Nachricht.
- A Kopfzeile Das Header-Element enthรคlt Informationen wie Authentifizierungsdaten, die von der aufrufenden Anwendung verwendet werden kรถnnen. Es kann auch Definitionen komplexer Datentypen enthalten, die in der SOAP-Nachricht verwendet werden. Standardmรครig kann die SOAP-Nachricht Parameter enthalten, die einfache Datentypen wie Zeichenketten und Zahlen sein kรถnnen, aber auch komplexe Objekttypen.
Im Folgenden wird ein einfaches SOAP-Dienstbeispiel fรผr einen komplexen Datentyp dargestellt. Angenommen, wir mรถchten einen strukturierten Datentyp senden, der eine Kombination aus einem โTutorialnamenโ und einem โTutorialโ enthรคlt. DescriptWenn wir dann โionโ verwenden, definieren wir den komplexen Typ wie unten gezeigt. Der komplexe Typ wird durch das Element-Tag definiert. Alle erforderlichen Elemente der Struktur sowie ihre jeweiligen Datentypen werden dann in der Sammlung komplexer Typen definiert.
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
A Korpus Element, das Aufruf- und Antwortinformationen enthรคlt โ Dieses Element enthรคlt die eigentlichen Daten, die zwischen dem Webdienst und der aufrufenden Anwendung ausgetauscht werden mรผssen. Nachfolgend finden Sie ein Beispiel fรผr den SOAP-Body eines SOAP-Webdienstes, der mit dem im Header definierten komplexen Datentyp arbeitet. Hier ist die Antwort fรผr den Tutorialnamen und das Tutorial. DescriptIonen, die an die aufrufende Anwendung gesendet wird, die diesen Webdienst aufruft.
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
SOAP-Nachrichtenstruktur
Zu beachten ist, dass SOAP-Nachrichten normalerweise automatisch vom Webdienst generiert werden, wenn dieser aufgerufen wird.
Wenn eine Client-Anwendung eine Methode im Webdienst aufruft, generiert der Webdienst automatisch eine SOAP-Nachricht mit den erforderlichen Details der Daten, die vom Webdienst an die Client-Anwendung gesendet werden.
Wie im vorherigen Abschnitt dieses SOAP-Tutorials erlรคutert, besteht eine einfache SOAP-Nachricht aus folgenden Elementen:
- Das Envelope-Element
- Das Header-Element und
- Das Kรถrperelement
- Das Fault-Element (optional)
Schauen wir uns im Folgenden ein Beispiel einer einfachen SOAP-Nachricht an und sehen wir uns an, was jedes Element bewirkt.

- Wie aus der obigen SOAP-Nachricht hervorgeht, ist der erste Teil der SOAP-Nachricht das Umschlagelement, das zum Kapseln der gesamten SOAP-Nachricht verwendet wird.
- Das nรคchste Element ist der SOAP-Text, der die Details der eigentlichen Nachricht enthรคlt.
- Unsere Nachricht enthรคlt einen Webdienst mit dem Namen โGuru99WebServiceโ.
- Die vollstรคndigeGuru99Webserviceโ akzeptiert einen Parameter vom Typ 'int' und hat den Namen TutorialID.
Jetzt wird die obige SOAP-Nachricht zwischen dem Webdienst und der Clientanwendung weitergeleitet.
Sie kรถnnen erkennen, wie nรผtzlich die obigen Informationen fรผr die Clientanwendung sind. Die SOAP-Nachricht teilt der Clientanwendung den Namen des Webdienstes, die erwarteten Parameter und den jeweiligen Datentyp mit.
SOAP-Umschlagelement
Der erste Teil des Bausteins ist der SOAP-Umschlag.
Der SOAP-Umschlag wird verwendet, um alle notwendigen Details der SOAP-Nachrichten zu kapseln, die zwischen dem Webdienst und der Client-Anwendung ausgetauscht werden.
Das SOAP-Envelope-Element wird verwendet, um den Anfang und das Ende einer SOAP-Nachricht anzuzeigen. Dadurch kann die Clientanwendung, die den Webdienst aufruft, wissen, wann die SOAP-Nachricht endet.
Zum SOAP-Envelope-Element sind folgende Hinweise zu beachten.
- Jede SOAP-Nachricht benรถtigt ein Wurzelelement namens โEnvelopeโ. Das Vorhandensein eines Envelope-Elements ist fรผr eine SOAP-Nachricht zwingend erforderlich.
- Jedes Umschlagelement muss mindestens ein Seifenkรถrperelement haben.
- Wenn ein Envelope-Element ein Header-Element enthรคlt, darf es nicht mehr als eines enthalten und muss als erstes untergeordnetes Element des Envelope vor dem Body-Element erscheinen.
- Der Umschlag รคndert sich, wenn sich die SOAP-Versionen รคndern.
- Ein v1.1-kompatibler SOAP-Prozessor generiert einen Fehler, wenn er eine Nachricht empfรคngt, die den v1.2-Envelope-Namespace enthรคlt.
- Ein v1.2-kompatibler SOAP-Prozessor generiert einen Versionskonfliktfehler, wenn er eine Nachricht empfรคngt, die den v1.2-Envelope-Namespace nicht enthรคlt.
Nachfolgend ein SOAP-API-Beispiel der Version 1.2 des SOAP-Envelope-Elements.
<?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body> <Guru99WebService xmlns="http://tempuri.org/"> <TutorialID>int</TutorialID> </Guru99WebService> </soap:Body> </SOAP-ENV:Envelope>
Die Fehlermeldung
Bei einer Anfrage an einen SOAP-Webdienst kann die Antwort entweder eine Erfolgsmeldung oder eine Fehlermeldung sein. Im Erfolgsfall antwortet der Server stets mit einer SOAP-Nachricht. Fehler hingegen werden als โHTTP 500โ-Fehler zurรผckgegeben.
Die SOAP-Fehlermeldung besteht aus den folgenden Elementen.
- <faultCode> โ Dies ist der Code, der den Fehlercode angibt. Der Fehlercode kann einen der folgenden Werte annehmen:
- SOAP-ENV:VersionMismatch โ Dies ist der Fall, wenn ein ungรผltiger Namespace fรผr das SOAP-Envelope-Element festgestellt wird.
- SOAP-ENV:MustUnderstand โ Ein unmittelbar untergeordnetes Element des Header-Elements, dessen Attribut โmustUnderstandโ auf โ1โ gesetzt ist, wurde nicht verstanden.
- SOAP-ENV:Client โ โโDie Nachricht war falsch formatiert oder enthielt falsche Informationen.
- SOAP-ENV:Server โ Es gab ein Problem mit dem Server, daher konnte die Nachricht nicht fortgesetzt werden.
- โ Dies ist die Textnachricht, die eine detaillierte Beschreibung des Fehlers enthรคlt.
- (Optional) โ Dies ist eine Textzeichenfolge, die angibt, wer den Fehler verursacht hat.
- (Optional) โ Dies ist das Element fรผr anwendungsspezifische Fehlermeldungen. Daher kรถnnte die Anwendung eine bestimmte Fehlermeldung fรผr verschiedene Geschรคftslogikszenarien haben.
Beispiel fรผr Fehlermeldung
Ein Beispiel fรผr eine Fehlermeldung ist unten aufgefรผhrt. Der Fehler tritt auf, wenn der Client versucht, die Methode โTutorialIDโ der Klasse โGetTutorialโ aufzurufen. Die folgende Fehlermeldung wird generiert, falls die Methode in der definierten Klasse nicht existiert.
<?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode> <faultstring xsi:type="xsd:string"> Failed to locate method (GetTutorialID) in class (GetTutorial) </faultstring> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Ausgang:
Wenn Sie den obigen Code ausfรผhren, wird eine Fehlermeldung wie โMethode (GetTutorialID) in Klasse (GetTutorial) konnte nicht gefunden werdenโ angezeigt.
SOAP-Kommunikationsmodell
Die gesamte Kommunikation per SOAP erfolgt รผber das HTTP-Protokoll. Vor SOAP viele Web-Services verwendete den Standard-RPC-Stil (Remote Procedure Call) fรผr die Kommunikation. Dies war die einfachste Art der Kommunikation, hatte jedoch viele Einschrรคnkungen.
In diesem SOAP-API-Tutorial betrachten wir das folgende Diagramm, um die Funktionsweise dieser Kommunikation zu verstehen. In diesem Beispiel gehen wir davon aus, dass der Server einen Webdienst mit zwei Methoden bereitstellt:
- GetEmployee โ Dadurch wรผrden alle Mitarbeiterdaten abgerufen.
- SetEmployee โ Dadurch wรผrden die Werte der Details wie Abteilung, Gehalt usw. eines Mitarbeiters entsprechend festgelegt.
Bei der normalen Kommunikation im RPC-Stil wรผrde der Client einfach die Methoden in seiner Anfrage aufrufen und die erforderlichen Parameter an den Server senden, und der Server wรผrde dann die gewรผnschte Antwort senden.
Das oben beschriebene Kommunikationsmodell weist folgende gravierende Einschrรคnkungen auf:
- Nicht sprachunabhรคngig โ Der Server, auf dem die Methoden gehostet werden, ist in einer bestimmten Programmiersprache geschrieben, und normalerweise erfolgen die Aufrufe an den Server ausschlieรlich in dieser Programmiersprache.
- Nicht das Standardprotokoll โ Beim Aufruf der Remote-Prozedur erfolgt der Aufruf nicht รผber das Standardprotokoll. Dies war ein Problem, da grรถรtenteils die gesamte Kommunikation รผber das Web รผber das HTTP-Protokoll erfolgen musste.
- Firewalls โ Da RPC-Aufrufe nicht รผber das normale Protokoll erfolgen, mรผssen auf dem Server separate Ports geรถffnet sein, damit der Client mit dem Server kommunizieren kann. Normalerweise blockieren alle Firewalls diese Art von Datenverkehr und im Allgemeinen waren umfangreiche Konfigurationsschritte erforderlich, um sicherzustellen, dass diese Art der Kommunikation zwischen dem Client und dem Server funktioniert.
Um alle oben genannten Einschrรคnkungen zu รผberwinden, wรผrde SOAP dann das unten beschriebene Kommunikationsmodell verwenden.
- Der Client formatierte die Informationen zum Prozeduraufruf und etwaigen Argumenten in eine SOAP-Nachricht und sendete diese als Teil einer HTTP-Anfrage an den Server. Dieser Prozess der Datenkapselung in eine SOAP-Nachricht wurde als SOAP-Verknรผpfung bezeichnet. Rangieren.
- Der Server wรผrde dann die vom Client gesendete Nachricht entpacken, die Clientanfrage prรผfen und die entsprechende Antwort als SOAP-Nachricht an den Client zurรผcksenden.ping Eine vom Client gesendete Anfrage wird als โฆ bezeichnet. Abgrenzung.
Praktisches SOAP-Beispiel
Jetzt hier SoapUI In diesem Tutorial sehen wir uns ein praktisches SOAP-Beispiel an. Am besten versteht man die Generierung von SOAP-Nachrichten, indem man einen Webdienst in Aktion beobachtet.
In diesem Thema geht es um die Verwendung von Microsoft.Net-Framework zum Erstellen eines ASMX-Webdienstes. Diese Art von Webdienst unterstรผtzt sowohl SOAP Version 1.1 als auch Version 1.2.
ASMX-Webdienste generieren automatisch die Web Service Definition Language (WSDL) dokumentieren. Dieses WSDL-Dokument wird von der aufrufenden Clientanwendung benรถtigt, damit die Anwendung weiร, wozu der Webdienst in der Lage ist.
In unserem Beispiel erstellen wir einen einfachen Webdienst, der einen String an die aufrufende Anwendung zurรผckgibt. Dieser Webdienst wird in einem Asp.Net Internetanwendung. Anschlieรend rufen wir den Webdienst auf und sehen das Ergebnis, das vom Webdienst zurรผckgegeben wird.
Visual Studio zeigt uns auch die SOAP-Nachricht an, die zwischen dem Webdienst und der aufrufenden Anwendung ausgetauscht wird. Die erste Voraussetzung fรผr die Einrichtung unserer Webdienstanwendung kann durch Befolgen der folgenden Schritte erfรผllt werden. Bitte stellen Sie sicher, dass fรผr dieses Beispiel Visual Studio 2013 auf Ihrem System installiert ist.
Schritt 1) Der erste Schritt besteht darin, eine leere ASP.Net-Webanwendung zu erstellen. Klicken Sie in Visual Studio 2013 auf die Menรผoption Datei->Neues Projekt.
Sobald Sie auf die Option โNeues Projektโ klicken, รถffnet Visual Studio ein weiteres Dialogfeld, in dem Sie den Projekttyp auswรคhlen und die erforderlichen Projektdetails eingeben kรถnnen. Dies wird im nรคchsten Schritt erlรคutert.
Schritt 2) In diesem Schritt
- Stellen Sie sicher, dass Sie zuerst Folgendes auswรคhlen C# Webvorlage fรผr ASP.NET-Webanwendungen. Dieses Projekt muss von diesem Typ sein, um ein SOAP-Dienstprojekt zu erstellen. Bei Auswahl dieser Option fรผhrt Visual Studio die notwendigen Schritte zum Hinzufรผgen der fรผr jede webbasierte Anwendung erforderlichen Dateien aus.
- Geben Sie Ihrem Projekt einen Namen, in unserem Fall webservice.asmx. Stellen Sie anschlieรend sicher, dass Sie einen Speicherort fรผr die Projektdateien angeben.
Nach Abschluss des Vorgangs wird die erstellte Projektdatei im Projektmappen-Explorer von Visual Studio 2013 angezeigt.
Schritt 3) In diesem Schritt fรผgen wir unserem Projekt eine Webdienstdatei hinzu.
- Klicken Sie zunรคchst mit der rechten Maustaste auf die Projektdatei, wie unten dargestellt.
- Sobald Sie mit der rechten Maustaste auf die Projektdatei klicken, kรถnnen Sie die Option โHinzufรผgen โ Webdienst (ASMX)โ auswรคhlen, um eine Webdienstdatei hinzuzufรผgen. Geben Sie der Webdienstdatei einfach den Namen โTutorialdienstโ an.
Schritt 4) Fรผgen Sie Ihrer Tutorial Service-ASMX-Datei den folgenden Code hinzu.
Code Erlรคuterung:
- Diese Codezeile stellt einen Namen fรผr Ihre Webdienstdatei bereit. Dies ist ein wichtiger Schritt, da er der Clientanwendung die Mรถglichkeit gibt, den Webdienst รผber den Namen des Webdiensts aufzurufen.
- Normalerweise wird eine Klassendatei verwendet, um die Funktionalitรคt eines Webdienstes zu kapseln. Die Klassendatei enthรคlt also die Definition aller Webmethoden, die der Clientanwendung einige Funktionen bereitstellen.
- Hier wird [WebMethod] als Attribut bezeichnet, das eine Funktion beschreibt. Im nรคchsten Schritt wird eine Funktion namens โGuru99WebServiceโ, aber durch das Hinzufรผgen des Attributs [WebMethod] wird sichergestellt, dass diese Methode von einer Clientanwendung aufgerufen werden kann. Fehlt dieses Attribut, kann die Methode von keiner Clientanwendung aufgerufen werden.
- Hier definieren wir eine Funktion namens 'GuruDie Funktion โ99WebServiceโ gibt eine Zeichenkette an die aufrufende Clientanwendung zurรผck. Es handelt sich um einen Webdienst, der von jeder Clientanwendung aufgerufen werden kann.
- Wir verwenden die return-Anweisung, um die Zeichenkette โDies ist ein Guru99 Webdienstโ an die Clientanwendung.
Wenn der Code erfolgreich ausgefรผhrt wird, wird die folgende Ausgabe angezeigt, wenn Sie Ihren Code im Browser ausfรผhren.
Ausgang:
- Die Ausgabe zeigt deutlich, dass der Name unseres Webdienstes โGuru99 Web Serviceโ, was das Ergebnis der Namensgebung fรผr unseren Webdienst ist.
- Wir kรถnnen auch sehen, dass wir den Webdienst aufrufen kรถnnen. Wenn wir auf die Schaltflรคche โAufrufenโ klicken, erhalten wir die folgende Antwort im Webbrowser.
Die obige Ausgabe:
- Es zeigt deutlich, dass durch Aufruf der Webmethode die Zeichenkette โDies ist ein GuruEs wird โ99 Webdienstโ zurรผckgegeben.
- Visual Studio ermรถglicht Ihnen auรerdem die Anzeige der SOAP-Nachrichtenanforderung und -antwort, die generiert wird, wenn der oben genannte Webdienst aufgerufen wird.
Die SOAP-Anfrage, die beim Aufruf des Webservices generiert wird, ist unten dargestellt.
Code Erlรคuterung:
- Der erste Teil der SOAP-Nachricht ist das Envelope-Element, das bereits in den vorherigen Kapiteln besprochen wurde. Es handelt sich um das umschlieรende Element, das in jeder SOAP-Nachricht vorhanden ist.
- Der SOAP-Body ist das nรคchste Element und enthรคlt die eigentlichen Details der SOAP-Nachricht.
- Der dritte Teil ist das Element, das angibt, dass wir den Dienst mit dem Namen โโ aufrufen mรถchten.Guru99WebService'.
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap:Body> <Guru99WebServiceResponse xmlns="http://tempuri.org/"> <Guru99WebServiceResult>string</Guru99WebServiceResult> </Guru99WebServiceResponse> </soap:Body> </soap:Envelope>
Code Erlรคuterung:
- Der erste Teil der SOAP-Nachricht ist das Envelope-Element, das bereits in den vorherigen Kapiteln besprochen wurde. Es handelt sich um das umschlieรende Element, das in jeder SOAP-Nachricht vorhanden ist.
- Der SOAP-Body ist das nรคchste Element und enthรคlt die eigentlichen Details der SOAP-Nachricht.
- Das Interessante daran ist nun das Attribut โstringโ. Dieses teilt der Clientanwendung mit, dass der aufgerufene Webdienst ein Objekt vom Typ โstringโ zurรผckgibt. Das ist sehr nรผtzlich, da die Clientanwendung sonst nicht wรผsste, was der Webdienst zurรผckgibt.














