WSDL ⑥ - WSDL의 엘리먼트 <binding>

 

  Last Modified 2007/11/01
  by ides
 
http://tequiero35.egloos.com/



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">
                               
   <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
               SOAP binding 이용                          
SOAP 바인딩을 위한 네임스페이스 기술

    <!-- 하나의 메소드에 대한 파라미터, 리턴 값의 인코딩 정보 기술 -->

    <wsdl:operation name="max">
    
<wsdlsoap:operation soapAction=""/>               <!--HTTP 헤더의 SOAPAction 정의-->
        
<wsdl:input name="maxRequest">

               <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

                                       namespace="http://web.axis.com" use="encoded"/>

         </wsdl:input>
         
<wsdl:output name="maxResponse">

               <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

                                       namespace="http://web.axis.com" use="encoded"/>

         </wsdl:output>
   
</wsdl:operation>


</wsdl:binding>




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 ides | 2007/11/01 20:34 | [P] Web Services | 트랙백(1) | 덧글(0)

트랙백 주소 : http://tequiero35.egloos.com/tb/942883
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from 부탄가스님의 이글루 at 2008/01/22 17:51

제목 : WSDL ⑥ - WSDL의 엘리먼트 <binding>
WSDL ⑥ - WSDL의 엘리먼트 &lt;binding&gt;...more

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶