3장. 서비스에서 사용하는 논리 메시지 정의
초록
서비스는 작업이 호출될 때 교환되는 메시지에 의해 정의됩니다. WSDL 계약에서 이러한 메시지는 message
요소를 사용하여 정의됩니다. 메시지는 part
요소를 사용하여 정의된 하나 이상의 부분으로 구성됩니다.
3.1. 개요
서비스의 작업은 작업이 호출될 때 교환되는 논리 메시지를 지정하여 정의합니다. 이러한 논리 메시지는 네트워크를 통해 XML 문서로 전달되는 데이터를 정의합니다. 여기에는 메서드 호출의 일부인 모든 매개 변수가 포함됩니다. 논리 메시지는 계약에서 message
요소를 사용하여 정의됩니다. 각 논리 메시지는 part
요소에 정의된 하나 이상의 부분으로 구성됩니다.
메시지는 각 매개변수를 별도의 부분으로 나열할 수 있지만 권장되는 방법은 작업에 필요한 데이터를 캡슐화하는 단일 부분만 사용하는 것입니다.
3.2. 메시지 및 매개변수 목록
서비스에 의해 노출되는 각 작업에는 하나의 입력 메시지와 하나의 출력 메시지만 있을 수 있습니다. 입력 메시지는 작업이 호출될 때 서비스가 수신하는 모든 정보를 정의합니다. 출력 메시지는 작업이 완료될 때 서비스가 반환하는 모든 데이터를 정의합니다. 오류 메시지는 오류가 발생할 때 서비스에서 반환하는 데이터를 정의합니다.
또한 각 작업에는 여러 오류 메시지가 있을 수 있습니다. 오류 메시지는 서비스에 오류가 발생할 때 반환되는 데이터를 정의합니다. 이러한 메시지에는 일반적으로 소비자가 오류를 이해할 수 있는 충분한 정보를 제공하는 하나의 부분만 있습니다.
3.3. 레거시 시스템과 통합을 위한 메시지 설계
기존 애플리케이션을 서비스로 정의하는 경우 작업을 구현하는 메서드에서 사용하는 각 매개 변수가 메시지에 표시되도록 해야 합니다. 반환 값이 작업의 출력 메시지에 포함되어 있는지도 확인해야 합니다.
메시지를 정의하는 한 가지 방법은 RPC 스타일입니다. RPC 스타일을 사용할 때 메서드의 매개 변수 목록의 각 매개 변수에 대해 한 부분을 사용하여 메시지를 정의합니다. 각 메시지 부분은 계약의 유형 요소에 정의된 형식을
기반으로 합니다. 입력 메시지에는 메서드의 각 입력 매개변수에 대한 한 부분이 포함되어 있습니다. 출력 메시지에는 각 출력 매개변수에 대한 한 부분과 반환 값을 나타내는 부분이 포함됩니다(필요한 경우). 매개 변수가 input 매개 변수와 출력 매개 변수인 경우 입력 메시지와 출력 메시지의 일부로 나열됩니다.
RPC 스타일 메시지 정의는 Tibco 또는 CORBA와 같은 전송을 사용하는 레거시 시스템을 서비스할 때 유용합니다. 이러한 시스템은 절차 및 방법을 중심으로 설계되었습니다. 따라서 호출되는 작업의 매개 변수 목록과 유사한 메시지를 사용하여 쉽게 모델링할 수 있습니다. RPC 스타일은 서비스와 노출 중인 애플리케이션 간에 보다 깔끔한 매핑을 만듭니다.
3.4. Cryostat 서비스에 대한 메시지 설계
RPC 스타일은 기존 시스템을 모델링하는 데 유용하지만 서비스의 커뮤니티는 래핑된 문서 스타일을 적극 권장합니다. 래핑된 문서 스타일에서는 각 메시지에 단일 부분이 있습니다. 메시지의 부분은 계약의 types
요소에 정의된 래퍼 요소를 참조합니다. 래퍼 요소에는 다음과 같은 특징이 있습니다.
- 요소의 시퀀스를 포함하는 복잡한 형식입니다. 자세한 내용은 2.5절. “복잡한 데이터 유형 정의” 에서 참조하십시오.
입력 메시지에 대한 래퍼인 경우:
- 각 메서드의 입력 매개 변수에 대해 하나의 요소가 있습니다.
- 해당 이름은 연결된 작업의 이름과 동일합니다.
출력 메시지에 대한 래퍼인 경우:
- 각 메서드의 출력 매개 변수에 대해 하나의 요소와 메서드의 inout 매개변수 각각에 대해 하나의 요소가 있습니다.
- 첫 번째 요소는 메서드의 반환 매개 변수를 나타냅니다.
-
래퍼가 연결된 작업의 이름에
Response
를 추가하여 해당 이름이 생성됩니다.
3.5. 메시지 이름 지정
계약의 각 메시지는 해당 네임스페이스 내에 고유한 이름이 있어야 합니다. 다음 명명 규칙을 사용하는 것이 좋습니다.
- 메시지는 단일 작업에서만 사용해야 합니다.
-
입력 메시지 이름은 작업 이름에
요청을
추가하여 구성됩니다. -
출력 메시지 이름은 작업 이름에
Response
를 추가하여 구성됩니다. - 오류 메시지 이름은 오류의 이유를 나타냅니다.
3.6. 메시지 부분
메시지 부분은 논리 메시지의 공식 데이터 단위입니다. 각 부분은 part
요소를 사용하여 정의되며 name
특성과 type
특성 또는 해당 데이터 유형을 지정하는 요소
특성으로 식별됩니다. 데이터 유형 속성은 표 3.1. “파트 데이터 유형 속성” 에 나열됩니다.
속성 | 설명 |
---|---|
부분의 데이터 유형은 elem_name 이라는 요소로 정의됩니다. | |
부분의 데이터 유형은 type_name 이라는 유형으로 정의됩니다. |
메시지는 부분 이름을 재사용할 수 있습니다. 예를 들어, 메서드에 참조로 전달되거나 in/out 매개변수가 있는 경우 예 3.1. “재사용된 부분” 에 표시된 것처럼 요청 메시지와 응답 메시지의 일부일 수 있습니다.
예 3.1. 재사용된 부분
<message name="fooRequest"> <part name="foo" type="xsd:int"/> <message> <message name="fooReply"> <part name="foo" type="xsd:int"/> <message>
3.7. 예
예를 들어, 개인 정보를 저장하고 직원의 ID 번호를 기반으로 직원의 데이터를 반환하는 방법을 제공한 서버가 있다고 가정해 보겠습니다. 데이터를 검색하는 방법 서명은 예 3.2. “personalInfo 조회 방법” 과 유사합니다.
예 3.2. personalInfo 조회 방법
personalInfo lookup(long empId)
이 메서드 서명을 예 3.3. “RPC WSDL 메시지 정의” 에 표시된 RPC 스타일 WSDL 조각에 매핑할 수 있습니다.
예 3.3. RPC WSDL 메시지 정의
<message name="personalLookupRequest"> <part name="empId" type="xsd:int"/> <message/> <message name="personalLookupResponse> <part name="return" element="xsd1:personalInfo"/> <message/>
또한 예 3.4. “래핑된 문서 WSDL 메시지 정의” 에 표시된 래핑된 문서 스타일 WSDL 조각에 매핑할 수도 있습니다.
예 3.4. 래핑된 문서 WSDL 메시지 정의
<wsdl:types> <xsd:schema ... > ... <element name="personalLookup"> <complexType> <sequence> <element name="empID" type="xsd:int" /> </sequence> </complexType> </element> <element name="personalLookupResponse"> <complexType> <sequence> <element name="return" type="personalInfo" /> </sequence> </complexType> </element> </schema> </types> <wsdl:message name="personalLookupRequest"> <wsdl:part name="empId" element="xsd1:personalLookup"/> <message/> <wsdl:message name="personalLookupResponse"> <wsdl:part name="return" element="xsd1:personalLookupResponse"/> <message/>