http://blog.naver.com/rks6230?Redirect=Log&logNo=40045208405
1. SOAP RPC 호출 모델 2. SOAP 문서 교환 모델 |
▪ 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); | |
예제 |
<message name="myMethodRequest"> <part name="x" type="xsd:int"/> <part name="y" type="xsd:float"/> </message> <message name="empty"/> <operation name="myMethod"> <input message="myMethodRequest"/> <output message="empty"/> </operation> </portType> <binding .../> |
메시지 예제 |
<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> </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 |