2007년 11월 01일
WSDL ⑥ - WSDL의 엘리먼트 <binding>
Last Modified |
5. <binding>
- 실제 메시지 전달에 사용되는 protocol과 binding 하는 부분
cf. binding : 특정 프로토콜로 웹 서비스 시스템에 접속하는 것.
- 웹 서비스 클라이언트가 사용해야 할 전송용 프로토콜(통신 방법)에 대해 기술한다.
- 요청방식이 단순히 문서를 전달하는지, 프로시저를 호출하는 것인지에 따라 document 타입과 rpc 타입을 선택한다.
- HTTP와 MIME을 직접 이용하거나 다른 프로토콜을 이용해서 바인딩할 수 있다.
▪ binding 의 종류
- SOAP 바인딩 : 웹 서비스 시스템의 원격 프로시저를 호출할 때 SOAP를 통해서 호출 요청하는 방식을 말한다.
- HTTP 바인딩 : HTTP는 주로 SOAP메시지의 전송 프로토콜로 많이 사용되지만, 원격 프로시저 호출용 프로토콜로 직접 사용될 수 있다.
HTTP만 해석하고 전송할 수 있는 클라이언트 응용프로그램에서 웹 서비스의 원격 프로시저를 호출할 때 유용하다.
이런 클라이언트 종류로 는 웹 브라우저, 휴대폰, PDA 등이 있다.
- MIME 바인딩 : MIME는 SOAP과 HTTP에서 함께 사용하여
문자 데이터와 바이너리 데이터를 함께 전송할 때 사용할 수 있는 방식이다.
▪ SOAP RPC 를 요청하는 방법
① HTTP 기반
- SOAP 프로세서는 대상 URL 을 기초로 요청한다.
- HTTP 요청의 일부인 SOAPAction (HTTP 헤더 값) 을 기초로 요청한다.
② SOAP 내용 기반
- SOAP Body 안의 첫번째 엘리먼트를 위한 namespace URI 값을 사용해 요청한다.
5-1. 기본 형식
| <wsdl:binding name="nmtoken" type="qname"> * <-- extensibility element (1) --> * <wsdl:operation name="nmtoken"> * <-- extensibility element (2) --> * <wsdl:input name="nmtoken"? > ? <-- extensibility element (3) --> * </wsdl:input> <wsdl:output name="nmtoken"? > ? <-- extensibility element (4) --> * </wsdl:output> <wsdl:fault name="nmtoken"> * <-- extensibility element (5) --> * </wsdl:fault> </wsdl:operation> </wsdl:binding> |
5-2. soap:binding
: SOAP Binding 을 사용할 때 꼭 존재해야 하는 엘리먼트. (<-- extensibility element (1) --> *)
| <wsdl:binding .... > <soap:binding transport="uri"? style="rpc|document"?> </wsdl:binding> |
▪ transport : SOAP과 매핑시킬 전송 프로토콜을 정한다.
http://schemas.xmlsoap.org/soap/http 이면 HTTP 프로토콜.
▪ style : 생략되면 document 로 취급한다.
RPC 지향(파라미터와 리턴값을 포함하는 messages)인지 Document 지향(document를 포함하는 messages)
인지를 나타낸다.
또한, 이 attribute는 soap:body에 영향을 끼친다.
▪ uri : http://schemas.xmlsoap.org/soap/http 는 HTTP Binding
다른 값 => http://schemas.xmlsoap.org/soap/SMTP,
http://schemas.xmlsoap.org/soap/ftp
5-3. soap:operation
: <binding> 내의 <operation>의 하위 엘리먼트. (<-- extensibility element (2) --> *)
포트 타입에 있는 각각의 메시지를 SOAP 전송에 대한 정의에 매핑하는 역할.
| <wsdl:binding .... > <wsdl:operation .... > <soap:operation soapAction="uri"? style="rpc|document"?>? </wsdl:operation> </wsdl:binding> |
▪ style : 생략될 경우, soap:binding 에 명기된 값이 default.
▪ soapAction : 이 operation의 SOAPAction Header의 값.
빈 문자열("")은 SOAPAction에 대한 유효한 값은 되어도, SOAP 라우터에게는 도움이 되지 않는다.
즉, 빈 문자열은 요청 URI 를 기초로 호출한다는 뜻이다.
5-4. soap:body
: SOAP Body 엘리먼트에 나타나는 message 파트를 어떻게 기술할지 나타낸다. (<-- extensibility element (3,4) --> *)
message의 파트는 abstract type definitions나 concrete schema definitions.
abstract definitions 이면, encoding style에 의해 정의된 룰셋에 따라 serialize 된다.
SOAP Encoding (http://schemas.xmlsoap.org/soap/encoding/) 같은 인코딩 스타일은
abstract type 셋의 메시지 포맷 안에서 변화할 수 있다.
포맷의 변화는 메시지의 리더에 달려 있다. 모든 변화를 지원해야 하는 것을 피하기 위해서는
message를 정확하게, 원래의 인코딩 스타일을 정의해야하고, writer는 명기된 스키마를 정확하게 확인해야 한다.
soap:body 바인딩은 SOAP 메시지의 Body 엘리먼트 안에 있는 다른 message part들을 모으는 방법을 제공한다.
soap:body 엘리먼트는 RPC지향이나 document지향의 메시지 모두에 사용된다.
| <wsdl:binding .... > <wsdl:operation .... > <wsdl:input> <soap:body parts="nmtokens"? use="literal|encoded"? encodingStyle="uri-list"? namespace="uri"?> </wsdl:input> <wsdl:output> <soap:body parts="nmtokens"? use="literal|encoded"? encodingStyle="uri-list"? namespace="uri"?> </wsdl:output> </wsdl:operation> </wsdl:binding> |
▪ soap:operation style 이
① rpc 이면 : 각 파트는 body 안의 wrapper 엘리먼트 내부에 파라미터와 리턴값이다.
wrapper element 이름은 operation 이름, 그것의 네임스페이스는 namespace attribute값이다.
② document 이면 : 추가적인 wrapper 는 없다. 메시지 파트는 SOAP Body 엘리먼트에 바로 나타난다.
▪ use
① encoded : 각 메시지의 parts는 type 속성을 사용해서 abstract type 를 참조한다.
abstract type 은 encodingStyle 을 적용해 구체적인 메시지를 생성한다.
② literal : 각 part는 element 나 type 속성을 사용해 정의된 구체적인 스키마를 참조한다.
element 속성은 document style binding이면 Body엘리먼트 하에 직접적으로 표현될 것이고,
rpc style이면 message 다음에 올 것이다.
type 속성은 enclosing 엘리먼트의 스키마 타입이 된다.
5-5. 예제
<wsdl:binding name="MaxMinSoapBinding" type="impl:MaxMinIF"> <!-- 하나의 메소드에 대한 파라미터, 리턴 값의 인코딩 정보 기술 --> <wsdl:operation name="max"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://web.axis.com" use="encoded"/> </wsdl:input> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://web.axis.com" use="encoded"/> </wsdl:output>
|
cf. SOAPAction
: SOAP = HTTP + XML
: HTTP 요청을 보내기 위해서, soapAction 헤더 필드를 HTTP에 공급해야 한다.
주어진 값은 실제 메시지의 HTTP 헤더에서 사용되어 메시지의 의도를 나타낸다.
즉, soapAction 은 SOAP 요청의 의도를 정의한다.
서버 (ex. HTTP에서 SOAP 요청 메시지를 필터링하는 방화벽)는 soapAction 의 값을 결정하는데 사용할 수 있다.
HTTP 클라이언트는 SOAP HTTP 요청이 발생할 때마다 이 헤더 필드를 사용한다.
5-5-1. 용도
- SOAP 메시지의 확인 : HTTP로 전달된 메시지가 SOAP 메시지라는 것을 확인
- 정확한 수신자 지정 : SOAP 메시지의 목적에 따라 정확한 수신자를 나타내기 위한 부가 정보를 표시
- 보안상의 목적 : SOAP 메시지의 목적이 명시되지 않은 요청을 거부하기 위한 정보로도 활용
5-5-2. SOAPAction 의 값
① SOAPAction: "URI-Reference"
ex. SOAPACtion:"www.mobilephoneservice.com/Vendors/MobilePhoneservice#getListOfModels"
특정 SOAP 전개의 주소 메소드 이름을 부여해주는 식별자
② SOAPAction: "filename"
ex. SOAPAction:"MobilePhoneservice#getListOfModels"
mobilephoneservice 파일은 Host URI (www.mobilephoneservice.com/Vendor)에 나타나야 한다.
이 Host URI는 HTTP Header(www.mobilephoneservice.com)의 호스트 필드와 폴더 이름 /Vendors의 조합이다.
③ SOAPAction: ""
ex. SOAPAction:""
SOAP 의 목적이 Host URI (www.mobilephoneservice.com/Vendor)에 의해서 결정된다.
④ SOAPAction:
ex. SOAPAction:
메시지의 목적에 대한 정보가 없다. 바디 엘리먼트의 첫번째 자식 엘리먼트가 SOAP 요청의 목적을 명시.

< REFERENCE>
http://blog.naver.com/mickyblue.do?Redirect=Log&logNo=40043247796http://blog.naver.com/vhwani?
Redirect=Log&logNo=30021852187
http://www.skywayradio.com/tech/WAS51/WSDL_anatomy.php
http://www.ibm.com/developerworks/kr/library/ws-intwsdl2/
http://cafe.naver.com/specialj.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=2429
http://www.w3.org/TR/2001/NOTE-wsdl-20010315
소설 같은 XML
자바를 이용한 웹 서비스 구축
# by | 2007/11/01 20:34 | [P] Web Services | 트랙백(1) | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
제목 : WSDL ⑥ - WSDL의 엘리먼트 <binding>
WSDL ⑥ - WSDL의 엘리먼트 <binding>...more