반응형

SOAP의 특징을 다시 한번 정리하면 다음과 같습니다.

 

·  SOAP는 인터넷을 통해 통신하도록 설계된 통신 프로토콜입니다.

·  SOAP XML 메시징을 위해 HTTP를 확장할 수 있습니다.

·  SOAP는 웹 서비스에 대한 데이터 전송을 제공합니다.

·  SOAP는 완전한 문서를 교환하거나 원격 프로시저를 호출할 수 있습니다.

·  SOAP는 메시지를 브로드캐스트하는데 사용할 수 있습니다.

·  SOAP는 플랫폼과 언어에 독립적입니다.

·  SOAP는 전송되는 정보와 방법을 정의하는 XML 방식입니다.

·  SOAP를 사용하면 클라이언트 응용 프로그램이 원격 서비스에 쉽게 연결하고 원격 메서드를 호출할 수 있습니다.

 

SOAP - 메시지 구조

SOAP 메시지는 다음 요소를 포함하는 일반 XML 문서입니다.

·  Envelope - 메시지의 시작과 끝을 정의합니다필수 요소입니다.

·  Header - 중간 지점이나 궁극적인 끝 지점에서 메시지 처리에 사용되는 메시지의 선택적 속성을 포함합니다선택적 요소입니다.

·  Body - 전송되는 메시지를 구성하는 XML 데이터를 포함합니다필수 요소입니다.

·  Fault - 메시지를 처리하는 동안 발생하는 오류에 대한 정보를 제공하는 선택적 Fault 요소입니다.

 

이러한 모든 요소는 SOAP envolope의 기본 네임스페이스http://www.w3.org/2001/12/soap-envelope )에 선언되어 있으며 SOAP 인코딩 및 데이터 유형의 기본 네임스페이스는 다음과 같습니다http://www.w3.org/2001/12/soap-encoding

 

참고 - 이 모든 사양은 변경될 수 있습니다따라서 W3 웹사이트에서 제공되는 최신 사양으로 계속 업데이트해야합니다.

 

SOAP 메시지 구조

다음 블록은 SOAP 메시지의 일반 구조를 나타냅니다.

 

<?xml version = "1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Header>
      ...
      ...
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      ...
      ...
      <SOAP-ENV:Fault>
         ...
         ...
      </SOAP-ENV:Fault>
      ...
   </SOAP-ENV:Body>
</SOAP_ENV:Envelope>

 

SOAP - envelope

SOAP envelope는 메시지의 시작과 끝을 나타내므로 수신자는 전체 메시지가 언제 수신되었는지 알 수 있습니다. SOAP envelope는 메시지 수신을 완료하고 처리할 준비가 된 시점을 아는 문제를 해결합니다따라서 SOAP envelope는 기본적으로 패키징 메커니즘입니다.

 

주의 사항

·  모든 SOAP 메시지에는 root Envelope 요소가 있습니다.

·  envelope SOAP 메시지의 필수 부분입니다.

·  모든 Envelope 요소는 정확히 하나의 Body 요소를 포함해야 합니다.

·  Envelope Header 요소가 포함되어 있는 경우에는 하나만 포함해야 하며, Body 앞에 Envelope의 첫 번째 자식으로 나타나야 합니다.

·  SOAP 버전이 변경되면 envelope가 변경됩니다.

·  SOAP envelope ENV 네임스페이스 접두사와 Envelope요소를 사용하여 지정됩니다.

·  선택적 SOAP 인코딩은 또한 네임스페이스 이름과 선택적 encodingStyle 요소를 사용하여 지정되며, 이는 SOAP 이외의 인코딩 스타일을 가리킬 수도 있습니다.

·   v1.1 호환 SOAP 프로세서는 v1.2 envelope 이름 공간이 포함된 메시지를 수신하면 오류를 생성합니다.

·   v1.2 호환 SOAP 프로세서는 v1.2 envelope 네임스페이스가 포함되지 않은 메시지를 수신하는 경우 VersionMismatch 오류를 생성합니다.

 

v1.2 호환 SOAP 메시지

다음은 v1.2 호환 SOAP 메시지의 예입니다.

 

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
   ...
   Message information goes here
   ...
</SOAP-ENV:Envelope>

 

HTTP POST가 있는 SOAP

다음 예에서는 서버로 메시지를 보내는 HTTP POST 작업 내에서 SOAP 메시지를 사용하는 방법을 보여줍니다. envelope 스키마 정의 및 인코딩 규칙의 스키마 정의에 대한 네임스페이스를 보여줍니다. HTTP헤더의 OrderEntry 참조는 tutorialspoint.com 웹 사이트에서 호출할 프로그램의 이름입니다.

 

POST /OrderEntry HTTP/1.1
Host: www.tutorialspoint.com
Content-Type: application/soap; charset = "utf-8"
Content-Length: nnnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
   ...
   Message information goes here
   ...
</SOAP-ENV:Envelope>

참고 - HTTP 바인딩은 서비스의 위치를 ​​지정합니다.

 

SOAP - 헤더

선택적 Header 요소는 추가 응용 프로그램 수준 요구 사항을 지정하기 위한 유연한 프레임워크를 제공합니다예를 들어 Header 요소를 사용하여 암호로 보호된 서비스에 대한 디지털 서명을 지정할 수 있습니다마찬가지로, Envelope SOAP 서비스에 대한 계정 번호를 지정하는데 사용할 수 있습니다.

 

주의 사항

·  SOAP 메시지의 선택적 부분입니다.

·  헤더 요소는 여러 번 나타날 수 있습니다.

·  헤더는 새로운 기능을 추가하기 위한 것입니다.

·  SOAP 헤더에는 네임스페이스에 정의된 헤더 항목이 포함되어 있습니다.

·  헤더는 SOAP envelope의 첫 번째 직계 자식 요소로 인코딩됩니다.

·  여러 헤더가 정의되면 SOAP 헤더의 모든 직계 자식 요소가 SOAP 헤더 블록으로 해석됩니다.

 

SOAP 헤더 속성

SOAP 헤더는 다음과 같은 두 가지 속성을 가질 수 있습니다.

 

Actor 속성

SOAP 프로토콜은 메시지 경로를 SOAP 서비스 노드 목록으로 정의합니다이러한 중간 노드 각각은 일부 처리를 수행한 다음 메시지를 체인의 다음 노드로 전달할 수 있습니다. Actor 속성을 설정함으로써 클라이언트는 SOAP 헤더의 수신자를 지정할 수 있습니다.

 

MustUnderstand 속성

헤더 요소가 선택 사항인지 필수 항목인지 나타냅니다. true로 설정하면 수신자는 정의된 의미 체계에 따라 헤더 속성을 이해하고 처리하거나 오류를 반환해야 합니다.

 

다음 예는 SOAP 메시지에서 헤더를 사용하는 방법을 보여줍니다.

 

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = " http://www.w3.org/2001/12/soap-envelope"   
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Header>
      <t:Transaction 
         xmlns:t = "http://www.tutorialspoint.com/transaction/" 
         SOAP-ENV:mustUnderstand = "true">5
      </t:Transaction>
   </SOAP-ENV:Header>
   ...
   ...
</SOAP-ENV:Envelope>

 

SOAP – Body

SOAP body SOAP 메시지에서 교환되는 응용 프로그램 정의 XML 데이터를 포함하는 필수 요소입니다본문은 envelope 내에 포함되어야 하며 메시지에 대해 정의될 수 있는 모든 헤더를 따라야 합니다.

Bodyenvelope의 자식 요소로 정의되고 body에 대한 의미는 연관된 SOAP 스키마에 정의됩니다.

body에는 메시지의 최종 수신자를 위한 필수 정보가 포함되어 있습니다

 

<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
   ........
   <SOAP-ENV:Body>
      <m:GetQuotation xmlns:m = "http://www.tp.com/Quotation">
         <m:Item>Computers</m:Item>
      </m:GetQuotation>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

위의 예는 컴퓨터 세트의 견적을 요청합니다위의 m:GetQuotation Item 요소는 응용 프로그램별 요소입니다. SOAP 표준의 일부가 아닙니다.

 

다음은 위의 쿼리에 대한 응답입니다.

 

<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
   ........
   <SOAP-ENV:Body>
      <m:GetQuotationResponse xmlns:m = "http://www.tp.com/Quotation">
         <m:Quotation>This is Qutation</m:Quotation>
      </m:GetQuotationResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

일반적으로 응용 프로그램은 요청 및 응답 요소와 관련된 의미 체계를 포함하는 스키마도 정의합니다.

견적 서비스는 애플리케이션 서버에서 실행되는 EJB를 사용하여 구현될 수 있습니다그렇다면 SOAP 프로세서는 GetQuotationResponse 서비스의 EJB 구현 안팎으로 매개변수로 본문 정보를 매핑해야 합니다. SOAP 프로세서는 본문 정보를 .NET 개체, CORBA 개체, COBOL 프로그램 등에 매핑할 수도 있습니다.

반응형

'Onvif' 카테고리의 다른 글

XML 네임스페이스  (0) 2022.10.20
SOAP 메시지 구조 -2  (0) 2022.10.19
SOAP(Simple Object Access Protocal)  (1) 2022.10.05

+ Recent posts