Kann mir jemand die Unterschiede zwischen Webservices im Dokumentstil und im RPC-Stil erklären?
Es gibt zwei Kommunikationsstilmodelle, mit denen eine WSDL-Bindung in einen SOAP-Nachrichtentext übersetzt wird. Sie sind:
Dokument & RPC
Der Vorteil der Verwendung eines Dokumentstilmodells besteht darin, dass Sie den SOAP-Text nach Belieben strukturieren können, solange der Inhalt des SOAP-Nachrichtentexts eine beliebige XML-Instanz ist. Der Dokumentstil wird auch als nachrichtenorientierter Stil bezeichnet .
Bei einem Modell im RPC-Stil muss die Struktur des SOAP-Anforderungshauptteils jedoch sowohl den Operationsnamen als auch den Satz von Methodenparametern enthalten. Das RPC-Stilmodell nimmt eine bestimmte Struktur für die im Nachrichtentext enthaltene XML-Instanz an.
Darüber hinaus gibt es zwei Modelle zur Verwendung der Codierung, mit denen eine WSDL-Bindung in eine SOAP-Nachricht übersetzt wird. Sie sind: wörtlich und verschlüsselt
Bei Verwendung eines Literal-Use-Modells sollte der Inhalt des Körpers einer benutzerdefinierten XSD-Struktur (XML-Schema) entsprechen . Der Vorteil ist zweifach. Zum einen können Sie den Nachrichtentext mit dem benutzerdefinierten XML-Schema validieren. Darüber hinaus können Sie die Nachricht auch mit einer Transformationssprache wie XSLT transformieren.
Bei einem (SOAP) -codierten Verwendungsmodell muss die Nachricht XSD-Datentypen verwenden, die Struktur der Nachricht muss jedoch keinem benutzerdefinierten XML-Schema entsprechen. Dies macht es schwierig, den Nachrichtentext zu validieren oder XSLT-basierte Transformationen für den Nachrichtentext zu verwenden.
Die Kombination der verschiedenen Stil- und Verwendungsmodelle bietet uns vier verschiedene Möglichkeiten, eine WSDL-Bindung in eine SOAP-Nachricht zu übersetzen.
Document/literal
Document/encoded
RPC/literal
RPC/encoded
Ich würde empfehlen, dass Sie diesen Artikel mit dem Titel Welchen WSDL-Stil soll ich lesen ? von Russell Butek, der eine schöne Diskussion über die verschiedenen Stile und die Verwendung von Modellen zur Übersetzung einer WSDL-Bindung in eine SOAP-Nachricht sowie deren relative Stärken und Schwächen hat.
Sobald die Artefakte empfangen wurden, rufe ich in beiden Kommunikationsstilen die Methode am Port auf. Dies unterscheidet sich nicht im RPC-Stil und im Dokumentstil. Was ist der Unterschied und wo ist dieser Unterschied sichtbar?
Der Ort, an dem Sie den Unterschied finden können, ist die "ANTWORT"!
RPC-Stil:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.RPC)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
Die SOAP-Nachricht für die zweite Operation hat eine leere Ausgabe und sieht folgendermaßen aus:
Antwort im RPC-Stil:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Dokumentstil:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.DOCUMENT)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
Wenn wir den Client für die obige SEI ausführen, lautet die Ausgabe:
123 [123, 456]
Diese Ausgabe zeigt, dass ArrayList-Elemente zwischen dem Webdienst und dem Client ausgetauscht werden. Diese Änderung wurde nur durch Ändern des Stilattributs der SOAPBinding-Annotation vorgenommen. Die SOAP-Nachricht für die zweite Methode mit einem umfangreicheren Datentyp wird unten als Referenz angezeigt:
Antwort auf den Dokumentstil:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">123</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">456</return>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Fazit
- Wie Sie in den beiden SOAP-Antwortnachrichten bemerkt haben, ist es möglich, die SOAP-Antwortnachricht im Falle eines DOCUMENT-Stils zu validieren, jedoch nicht in Webdiensten im RPC-Stil.
- Der grundlegende Nachteil der Verwendung des RPC-Stils besteht darin, dass keine umfangreicheren Datentypen unterstützt werden, und dass die Verwendung des Dokumentstils darin besteht, dass die Definition der umfangreicheren Datentypen eine gewisse Komplexität in Form von XSD mit sich bringt.
- Die Wahl einer dieser Optionen hängt von den Betriebs- / Methodenanforderungen und den erwarteten Clients ab.
Inwiefern unterscheiden sich SOAP über HTTP von XML über HTTP? Immerhin ist SOAP auch ein XML-Dokument mit SOAP-Namespace. Was ist hier der Unterschied?
Warum brauchen wir einen Standard wie SOAP? Durch den Austausch von XML-Dokumenten über HTTP können zwei Programme umfangreiche strukturierte Informationen austauschen, ohne einen zusätzlichen Standard wie SOAP einzuführen, um ein Nachrichtenumschlagformat explizit zu beschreiben und strukturierte Inhalte zu codieren.
SOAP bietet einen Standard, damit Entwickler nicht für jeden Dienst, den sie zur Verfügung stellen möchten, ein benutzerdefiniertes XML-Nachrichtenformat erfinden müssen. Angesichts der Signatur der aufzurufenden Dienstmethode schreibt die SOAP-Spezifikation ein eindeutiges XML-Nachrichtenformat vor. Jeder Entwickler, der mit der SOAP-Spezifikation vertraut ist und in einer beliebigen Programmiersprache arbeitet, kann eine korrekte SOAP-XML-Anforderung für einen bestimmten Dienst formulieren und die Antwort des Dienstes verstehen, indem er die folgenden Dienstdetails abruft.
- Dienstname
- Vom Dienst implementierte Methodennamen
- Methodensignatur jeder Methode
- Adresse der Service-Implementierung (ausgedrückt als URI)
Die Verwendung von SOAP optimiert den Prozess zum Bereitstellen einer vorhandenen Softwarekomponente als Webdienst, da die Methodensignatur des Dienstes die XML-Dokumentstruktur identifiziert, die sowohl für die Anforderung als auch für die Antwort verwendet wird.