달력

12025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

http://blog.naver.com/rks6230?Redirect=Log&logNo=40045208405

 1. SOAP RPC 호출 모델
   1-1. RPC/Encoded 인코딩 방식
   1-2. RPC/Literal 인코딩 방식

 2. SOAP 문서 교환 모델
   2-1. Document/Encoded 인코딩 방식
   2-2. Document/Literal 인코딩 방식
   2-3. Document/Literal wrapped 인코딩 방식



 RPC 호출 모델 & 문서 교환 모델로 나뉘며 각각 literal과 encode 방식으로 구분된다.
사용자 삽입 이미지

▪ 두 가지 방식의 큰 차이점은 SOAP 메시지 내에 Body 의 기술 방식.

  ① 문서 교환 모델 : 상호간에 미리 정의된 XML 문서가 SOAP Body로 삽입
  ② RPC 호출 모델 : SOAP 메시지 내에 메서드명, 파라미터들 구조가 SOAP 엔진에 자동 삽입.


1. SOAP RPC 호출 모델

: SOAP Body 의 내용을 RPC 호출을 위한 특정 형식에 맞게 메시지를 인코딩하여 처리하는 모델.

▪ 특징
  ① tightly-coupled 요청/응답 기반 동기식 통신 지원 : 클라이언트 요청 후 서버의 응답 받을 때까지 다른 오퍼레이션 수행 X
  ② SOAP 엔진이 모두 처리(인코딩, 디코딩, 데이터 타입)하고, 단순히 파라미터를 통해 원격 객체를 호출만 하면 된다.

  ③ SOAP 통신을 위한 전송 프로토콜로 HTTP 를 사용할 경우, RPC 호출모델이 적합하다.
      이 모델의 전형적인 SOAP 인코딩 타입은 'RPC/Encoded'이다.
  ④ 직렬화된 데이터 형식이 XML에 의해 표현되는 것, SOAP 인코딩 규칙이 적용된다는 것을 제외하면
      기존의 CORBA or RMI 기반 통신과 유사하다


1-1. RPC/Encoded 인코딩 방식

▪ 장점 : WSDL 단순
           메서드 명이 메시지에 나타나므로, 수신자가 이 메시지를 이용해 구현하기 쉽다.
▪ 단점 : SOAP 메시지에 유형 인코딩 정보 (xsi:type="xsd:int") 가 표기되어 성능에 영향 미치는 오버헤드들이 존재.
           WSLD 규격을 준수해도 WS-I 규격을 준수하지 않으므로 WS-I 준수하는 웹서비스와의 연동에 어려움.

▪ 예제

public void myMethod (int x, float y);


WSDL

예제

<message name="myMethodRequest">

<part name="x" type="xsd:int"/>

<part name="y" type="xsd:float"/>

</message>

<message name="empty"/>

 
<portType name="PT">

<operation name="myMethod">

<input message="myMethodRequest"/>

<output message="empty"/>

</operation>

</portType>

<binding .../>


SOAP

메시지

예제

<soap:envelope>

<soap:body>

<myMethod>

<x xsi:type="xsd:int">5</x>

<y xsi:type="xsd:float">5.0</y>

</myMethod>

</soap:body>

</soap:envelope>




1-2. RPC/Literal 인코딩 방식

: RPC 메서드를 사용하여 호출하지만, 데이터 마샬링에는 사용자 정의 XML을 사용한다.
  즉, SOAP Body 섹션을 서버, 클라이언트 간의 협의에 의해 구성한다.

▪ 장점 : WSDL 단순
           메서드 명이 메시지에 나타나므로, 수신자가 이 메시지를 이용해 구현하기 쉽다.
           SOAP 메시지 상의 파라미터 타입 인코딩 정보가 제거되어 오버헤드 감소.
           WS-I 규격을 준수하므로 WS-I 지원 웹 서비스들과 연동에 문제 없다.
▪ 단점 : SOAP 메시지 상에 서비스에 대한 파라미터 타입 정보들이 XML 스키마에 정의된 것을 포함하므로,
           서비스 구현시 각 파라미터들에 대한 타입 정보를 알아내는 부수 작업이 필요.

▪ 예제

public void myMethod (int x, float y);

 

WSDL

예제

<message name="myMethodRequest">

<part name="x" type="xsd:int"/>

<part name="y" type="xsd:float"/>

</message>

<message name="empty"/>

 

<portType name="PT">

<operation name="myMethod">

<input message="myMethodRequest"/>

<output message="empty"/>

</operation>

</portType>

<binding .../>

 

SOAP

메시지

예제

<soap:envelope>

<soap:body>

<myMethod>

<x>5</x>

<y>5.0</y>

</myMethod>

</soap:body>

</soap:envelope>





2. SOAP 문서 교환 모델

▪ 특징
  ① 문서 중심의 비동기식 통신 지원 (loosely coupled)
      : 클라이언트가 SOAP 요청 메시지에 대한 리턴값을 요구하지 않을 수도 있다.
  ② 웹 서비스 개발자가 모든 것을 핸들링. SOAP Body의 마샬링/언마샬링 기능 직접 구현해야 한다.
  ③ 일련의 파라미터를 보내는 대신 전체 문서를 보낸다.
      서비스 제공자는 문서를 전달받아 처리한 후, 메시지의 반환 유무 결정.
  ④ SOAP 요청/응답 메시지 내의 SOAP Body 의 내용을 사전에 정의된 하나의 XML 문서로 구성.
  ⑤ Document/Literal 방식은 서비스 메서드의 입력 파라미터를 하나만 허용한다.
      So, 입력 파라미터가 2개 이상일 경우 파라미터를 모두 포함하는 형식(ex. 자바빈)으로 만들어 1개의 파라미터로 바꿔야 한다.

SOAP 메시지는 Header Block에 InventoryNotice와 Body product를 포함하는데,
  둘 다 SOAP에서 정의하는 것이 아니라, 응용 프로그램 안에서 정의된다.
  헤더 : 수신자 노드에서 필요로 하는 정보를 포함.
  바디 : 전달되어야 하는 실제 메시지 포함.

▪ SOAP 문서 교환 모델의 SOAP 메시지

<env:Envelope xmlns:env=http://www.w3.org/2001/12/soap-envelope>

<env:Header>

<n:InventoryNotice xmlns:n=http://jws.wiley.com/Inventory>

<n:productcode>J05879234798</n:productcode>

</n:InventoryNotice>

</env:Header>

<env:Body>

<m:product xmlns:m=http://jws.wiley.com/product>

<m:name>Developing Java Web Services</m:name>

<m:quantity>25000</m:quantity>

<m:date>2006-07-05</m:date>

</m:product>

</env:Body>

</env:Envelope>



2-1. Document/Encoded 인코딩 방식

: 현재 이용되지 않는 방식.



2-2. Document/Literal 인코딩 방식

▪ 장점 : SOAP 메시지 상에 유형 인코딩 정보가 기술되지 않으므로 오버헤드 없다.
           XML 유효성 검증기로 메시지를 최종 확인. SOAP Body 내의 모든 것이 스키마에서 정의된다.
           Document/Literal 은 WS-I 순응이지만 제한이 없다.
▪ 단점 : WSDL 복잡. 읽을 수 없다.
           SOAP 메시지의 연산 이름이 소실된다.
           WS-I는 SOAP 메시지에서 SOAP Body의 단 하나의 자식만 허용.
           다음 예제에서는 SOAP Body의 두 개의 자식이 있다.

▪ 예제

public void myMethod (int x, float y);

 

WSDL

예제

<types>

    <schema>

        <element name="xElement type="xsd:int"/>

<element name="yElement type="xsd:float"/>

</schema>

</types>

 

<message name="myMethodRequest">

<part name="x" element="xElement"/>

<part name="y" element ="yElement "/>

</message>

<message name="empty"/>

 

<portType name="PT">

<operation name="myMethod">

<input message="myMethodRequest"/>

<output message="empty"/>

</operation>

</portType>

<binding .../>

 

SOAP

메시지

예제

<soap:envelope>

<soap:body>

<xElement>5</xElement>

<yElement>5.0</yElement>

</soap:body>

</soap:envelope>




2-3. Document/Literal wrapped 인코딩 방식

▪ 장점 : SOAP 메시지 상에 파라미터 타입 인코딩 정보가 기술되지 않는다.
           SOAP Body에 나타나는 모든 것이 XML 스키마에서 정의된다.
           메서드 명이 메시지에 나타나므로, 수신자가 이 메시지를 이용해 구현하기 쉽다.
           Document/Literal 은 WS-I 규격을 준수하고,
           Document/Literal wrapped 방식은 SOAP Body 가 단 하나의 자식을 가져야 하는 WS-I 규격을 준수한다.
▪ 단점 : WSDL 복잡.

▪ 예제

public void myMethod (int x, float y);

 

WSDL

예제

<types>

    <schema>

        <element name="myMethod">

            <complexType>

                <sequence>

        <element name="x type="xsd:int"/>

<element name="y type="xsd:float"/>

</sequence>

            </complexType>

         </element>

<element name="myMethodResponse">

            <complexType/>

         </element>

</schema>

</types>

 

<message name="myMethodRequest">

<part name="parameters" element="myMethod"/>

</message>

<message name="empty">

<part name="parameters" element="myMethodResponse"/>

</message>

 

<portType name="PT">

<operation name="myMethod">

<input message="myMethodRequest"/>

<output message="empty"/>

</operation>

</portType>

<binding .../>

 

SOAP

메시지

예제

<soap:envelope>

<soap:body>

    <myMethod>

<x>5</x>

<y>5.0</y>

</myMethod>

</soap:body>

</soap:envelope>


'Soap & WebService' 카테고리의 다른 글

WS-* 스팩  (0) 2009.04.26
XML Schema  (0) 2008.11.19
SOAP Version 1.2 스펙 한글판  (0) 2008.08.20
SOAP message  (0) 2008.08.20
Webservice, Soap, wsdl  (0) 2008.08.20
Posted by marryjane
|