Belge stili ile RPC stili iletişim arasındaki fark nedir?


94

Biri bana Belge ve RPC tarzı web hizmetleri arasındaki farkları açıklayabilir mi? JAX-RPC dışında, sonraki sürüm hem Belge hem de RPC stillerini destekleyen JAX-WS'dir. Ayrıca, belge tarzı web hizmetlerinin, istemcinin yanıt alınana kadar engellemeyeceği zaman uyumsuz iletişim için olduğunu anlıyorum.

Her iki durumda da, JAX- WS'yi kullanarak şu anda hizmete @Webservice ile açıklama ekliyorum , WSDL'yi oluşturuyorum ve bu WSDL'den istemci tarafı yapıları oluşturuyorum.

Eserler alındıktan sonra, her iki stilde de, bağlantı noktasındaki yöntemi çağırıyorum. Şimdi, bu RPC stilinde ve Belge stilinde farklılık göstermez. Öyleyse fark nedir ve bu fark nerede görünür?

Benzer şekilde, HTTP üzerinden SOAP, HTTP üzerinden XML'den ne şekilde farklıdır? Sonuçta SOAP, SOAP ad alanına sahip bir XML belgesidir.


Yanıtlar:


99

Bazı kurumlar bana Belge stili ile RPC stili web hizmetleri arasındaki farkları açıklayabilir mi?

Bir WSDL bağlamasını bir SOAP mesaj gövdesine çevirmek için kullanılan iki iletişim stili modeli vardır. Bunlar: Belge ve RPC

Bir Belge tarzı modeli kullanmanın avantajı SOAP vücudu sürece SABUN ileti gövdesinin içeriği herhangi bir keyfi XML örneği olduğu gibi, istediğiniz şekilde yapılandırabilirsiniz olmasıdır. Belge stili aynı zamanda Mesaj Odaklı stil olarak da adlandırılır .

Bununla birlikte, bir RPC stili modelde , SOAP istek gövdesinin yapısı hem işlem adını hem de yöntem parametreleri kümesini içermelidir. RPC stil modeli , mesaj gövdesinde bulunan XML örneğinin belirli bir yapısını varsayar .

Ayrıca, bir WSDL bağlamasını bir SOAP mesajına çevirmek için kullanılan iki kodlama kullanım modeli vardır. Bunlar: değişmez ve kodlanmış

Bir kullanırken değişmez kullanım modeli , gövde içeriği kullanıcı tanımlı uygun olmalıdır XML şema (XSD) yapısı . Avantaj iki yönlüdür. Birincisi, mesaj gövdesini kullanıcı tanımlı XML şemasıyla doğrulayabilir, ayrıca XSLT gibi bir dönüştürme dili kullanarak mesajı dönüştürebilirsiniz.

(SOAP) kodlu kullanım modeliyle , mesajın XSD veri türlerini kullanması gerekir, ancak mesajın yapısının herhangi bir kullanıcı tanımlı XML şemasına uyması gerekmez. Bu, mesaj gövdesini doğrulamayı veya mesaj gövdesinde XSLT tabanlı dönüşümleri kullanmayı zorlaştırır.

Farklı stil ve kullanım modellerinin kombinasyonu, WSDL bağlamasını bir SOAP mesajına çevirmek için bize dört farklı yol sunar.

Document/literal
Document/encoded
RPC/literal
RPC/encoded

Hangi WSDL stilini kullanmalıyım? Başlıklı bu makaleyi okumanızı tavsiye ederim. Russell Butek, farklı tarzlar hakkında güzel bir tartışmaya sahip olan ve bir SOAP mesajına WSDL bağlanmasını ve bunların göreceli güçlü ve zayıf yönlerini çevirmek için modelleri kullanan.

Eserler alındıktan sonra, her iki iletişim tarzında da, bağlantı noktasındaki yöntemi çağırıyorum. Şimdi, bu RPC stilinde ve Belge stilinde farklılık göstermez. Öyleyse fark nedir ve bu fark nerede görünür?

Farkı bulabileceğiniz yer "YANIT" dır!

RPC Stili:

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); 
}

İkinci işlem için SOAP mesajının çıkışı boş olacak ve şöyle görünecektir:

RPC Stil Yanıtı:

<ns2:getStockPriceListResponse 
       xmlns:ns2="http://sample.com/">
    <return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>

Belge Stili:

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);
}

İstemciyi yukarıdaki SEI için çalıştırırsak, çıktı:

123 [123, 456]

Bu çıktı, ArrayList öğelerinin web hizmeti ve istemci arasında değiş tokuş edildiğini gösterir. Bu değişiklik, yalnızca SOAPBinding ek açıklamasının stil özniteliği değiştirilerek yapılmıştır. Daha zengin veri tipine sahip ikinci yöntem için SOAP mesajı referans için aşağıda gösterilmiştir:

Belge Stili Yanıtı:

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

Sonuç

  • İki SOAP yanıt mesajında ​​fark edeceğiniz gibi, SOAP yanıt mesajını BELGE stilinde doğrulamanın mümkün olduğunu, ancak RPC stili web hizmetlerinde geçerli olmadığını fark etmişsinizdir.
  • RPC stilini kullanmanın temel dezavantajı, daha zengin veri türlerini desteklememesi ve Belge stilini kullanmanın, daha zengin veri türlerini tanımlamak için XSD biçiminde biraz karmaşıklık getirmesidir.
  • Bunlardan birini kullanma seçimi, işlem / yöntem gereksinimlerine ve beklenen müşterilere bağlıdır.

Benzer şekilde, SOAP over HTTP'den HTTP üzerinden XML'den ne şekilde farklıdır? Sonuçta SOAP, SOAP ad alanına sahip bir XML belgesidir. Öyleyse buradaki fark nedir?

SABUN gibi bir standarda neden ihtiyacımız var? XML belgelerini HTTP üzerinden değiş tokuş ederek, iki program, bir mesaj zarfı biçimini ve yapılandırılmış içeriği kodlamanın bir yolunu açıkça tanımlamak için SOAP gibi ek bir standart getirmeden zengin, yapılandırılmış bilgileri değiş tokuş edebilir.

SOAP, geliştiricilerin kullanılabilir hale getirmek istedikleri her hizmet için özel bir XML mesaj formatı icat etmelerine gerek kalmaması için bir standart sağlar. Çağrılacak hizmet yönteminin imzası göz önüne alındığında, SOAP belirtimi kesin bir XML mesaj formatı belirler. Herhangi bir programlama dilinde çalışan, SOAP belirtimine aşina olan herhangi bir geliştirici, belirli bir hizmet için doğru bir SOAP XML talebini formüle edebilir ve aşağıdaki hizmet ayrıntılarını alarak hizmetten alınan yanıtı anlayabilir.

  • Hizmet adı
  • Hizmet tarafından uygulanan yöntem adları
  • Her yöntemin yöntem imzası
  • Hizmet uygulamasının adresi (URI olarak ifade edilir)

SOAP kullanımı, mevcut bir yazılım bileşenini bir Web hizmeti olarak ortaya çıkarma sürecini kolaylaştırır çünkü hizmetin yöntem imzası hem istek hem de yanıt için kullanılan XML belge yapısını tanımlar.


"Hangi WSDL stilini kullanmalıyım?" İçin özel teşekkürler. makale bağlantısı.
Boolean_Type

23

RPC tarzı bir web hizmeti, bir yöntemin çağrı yığınını temsil eden XML yapıları oluşturmak için yöntemin adlarını ve parametrelerini kullanır. Belge stili, SOAP gövdesinin önceden tanımlanmış XML şema belgesine göre doğrulanabilen bir XML belgesi içerdiğini belirtir.

İyi bir başlangıç ​​noktası: SOAP Binding: Belge ve RPC Stili Web Hizmetleri arasındaki fark


20

WSDL tanımında, bağlamalar işlemleri içerir, burada her işlem için stil gelir.

Belge: WSDL dosyasında, gevşek bağlı kılan hizmet yöntemleriyle değiş tokuş edilen karmaşık veri türlerinin yapısını (yani şemayı) açıklayan, satır içi veya içe aktaran XSD belgesine sahip tür ayrıntılarını belirtir. Belge stili varsayılandır.

  • Avantaj :
    • Bu Belge stilini kullanarak, SOAP mesajlarını önceden tanımlanmış şemaya göre doğrulayabiliriz. Xml veri türlerini ve kalıplarını destekler.
    • gevşek bağlanmış.
  • Dezavantaj : Anlaması biraz zor.

WSDL türlerinde öğe aşağıdaki gibi görünür:

<types>
 <xsd:schema>
  <xsd:import schemaLocation="http://localhost:9999/ws/hello?xsd=1" namespace="http://ws.peter.com/"/>
 </xsd:schema>
</types>

Şema, harici referanstan içe aktarılıyor.

RPC : WSDL dosyasında, tür şeması oluşturmaz, mesaj öğeleri içinde sıkı bir şekilde bağlanan ad ve tür özniteliklerini tanımlar.

<types/>  
<message name="getHelloWorldAsString">  
<part name="arg0" type="xsd:string"/>  
</message>  
<message name="getHelloWorldAsStringResponse">  
<part name="return" type="xsd:string"/>  
</message>  
  • Avantaj : Anlaşılması kolay.
  • Dezavantaj :
    • SOAP mesajlarını doğrulayamıyoruz.
    • sıkıca bağlı

RPC: WSDL
Belgesinde tür yok : Türler bölümü WSDL'de mevcut olacak


Sadece referansta ne olduğunu tekrarladım. Bu açıklama, farkı anlamama yardımcı olmadı.
kinunt

1
bu kesinlikle bir referans veya belgeden değil - dilbilgisi hatalarıyla dolu
specializt

7

JAX-WS RPC ve Belge stilinin kullanıldığı ana senaryo aşağıdaki gibidir:

  • Uzaktan yordam çağrısı (RPC) tüketici kapsüllenmiş verilerle tek bir mantıksal uygulama ya da bileşen olarak web hizmeti görmektedir zaman paterni kullanılır. Talep ve yanıt mesajları doğrudan prosedür çağrısının giriş ve çıkış parametreleriyle eşleşir.

    Bu tipin örnekleri RPC modeli bir ödeme hizmetini veya bir hisse senedi fiyatlandırma hizmetini içerebilir.

  • Belge temelli model tüketici talebi belge bilgi tam birimini temsil uzun çalışan iş süreci olarak web hizmeti görmektedir durumlarda kullanılır. Bu tür bir web hizmeti, örneğin kredi veren kurumlardan gelen teklifleri içeren bir yanıt belgesiyle bir kredi başvurusu talep belgesinde olduğu gibi insan etkileşimini içerebilir . Daha uzun süre çalışan iş süreçleri istenen belgeyi hemen iade edemeyebileceğinden, belge tabanlı model daha yaygın olarak eşzamansız iletişim mimarilerinde bulunur. SOAP'ın Belge / değişmez varyasyonu, belge tabanlı web hizmeti modelini uygulamak için kullanılır.


3

Bence sorduğunuz şey, RPC Edebiyatı, Belge Değişimi ve Belge Sarılmış SABUN web hizmetleri arasındaki fark.

Belge web hizmetlerinin değişmez olarak tanımlandığını ve aynı zamanda sarıldığını ve farklı olduklarını unutmayın - birincil farklardan biri, ikincisinin BP 1.1 ile uyumlu olması ve birincisinin olmamasıdır.

Ayrıca, Belge Değişmezinde, çağrılacak işlem adı açısından belirtilmezken, Sarmalanmış durumdadır. Bu bence, talebin bulunduğu operasyon isminin kolaylıkla anlaşılması açısından önemli bir fark.

RPC literal ve Document Wrapped açısından bakıldığında, Document Wrapped isteği WSDL'deki şemaya göre kolayca incelenebilir / doğrulanabilir - büyük bir avantaj.

Avantajlarından dolayı web servis seçeneği olarak Document Wrapped'ı kullanmanızı öneririm.

SOAP on HTTP, taşıyıcı olarak HTTP'ye bağlı SOAP protokolüdür. SOAP, SMTP veya XXX üzerinde de olabilir. SOAP, varlıklar (örneğin, istemci ve sunucular) arasında bir etkileşim yolu sağlar ve her iki varlık da protokolün anlambilimine göre işlem argümanlarını / dönüş değerlerini sıralayabilir.

HTTP üzerinden XML kullanıyorsanız (ve yapabilirsiniz), bunun HTTP isteği / yanıtı üzerindeki XML yükü olduğu anlaşılır. Çerçeveyi sıralamak / unmarshal, hata işleme vb. İçin sağlamanız gerekir.

Java vurgulu WSDL ve kod örnekleri içeren ayrıntılı bir eğitim: SOAP ve JAX-WS, RPC'ye karşı Belge Web Hizmetleri


2

Belge
Belge stili mesajları, önceden tanımlanmış şemaya göre doğrulanabilir. Doküman tarzında SOAP mesajı tek bir doküman olarak gönderilir. Şema örneği:

  <types>  
   <xsd:schema> <xsd:import namespace="http://example.com/" 
    schemaLocation="http://localhost:8080/ws/hello?xsd=1"/>  
   </xsd:schema>  
  </types>

Belge tarzı sabun gövdesi mesajı örneği

  <message name="getHelloWorldAsString">   
     <part name="parameters" element="tns:getHelloWorldAsString"/>   
  </message> 
  <message name="getHelloWorldAsStringResponse">  
     <part name="parameters"> element="tns:getHelloWorldAsStringResponse"/>   
  </message>

Belge stili mesajı gevşek bir şekilde birleştirildi.

RPC RPC tarzı mesajlar, XML yapısı oluşturmak için yöntem adını ve parametrelerini kullanır. mesajların şemaya göre doğrulanması zordur. RPC tarzında, SOAP mesajı birçok eleman kadar gönderilir.

  <message name="getHelloWorldAsString">
    <part name="arg0"> type="xsd:string"/>   
   </message> 
  <message name="getHelloWorldAsStringResponse">   
    <part name="return"
   > type="xsd:string"/>   
  </message>

Burada her parametre ayrı ayrı belirtilmiştir, RPC stili mesajı sıkı bir şekilde birleştirilmiştir, tipik olarak statiktir ve yöntem imzası değiştiğinde istemcide değişiklik yapılmasını gerektirir. Rpc stili String ve Integer gibi çok basit XSD türleriyle sınırlıdır ve ortaya çıkan WSDL parametreleri tanımlamak ve sınırlamak için bir türler bölümü bile var

Değişmez Değer Varsayılan stil olarak. Veriler bir şemaya göre serileştirilir, veri türü mesajlarda belirtilmez, ancak sabun mesajları oluşturmak için şemaya (ad alanı) bir başvuru kullanılır.

   <soap:body>
     <myMethod>
        <x>5</x>
        <y>5.0</y>
     </myMethod>
   </soap:body>

Her parametrede belirtilen Kodlanmış Veri Türü

   <soap:body>
     <myMethod>
         <x xsi:type="xsd:int">5</x>
         <y xsi:type="xsd:float">5.0</y>
     </myMethod>
   </soap:body>

Şema ücretsiz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.