Web Service 샘플에는 두 부분이 있습니다.
웹 서비스 호스트 샘플을 실행할 경우, 브로커는 HTTP 프로토콜을 통해 SOAP/XML 메시지를 수신하고 다시 HTTP를 사용하여 SOAP/XML 응답 메시지를 송신합니다. 따라서 브로커는 웹 서비스 호스트 역할을 수행합니다.
브로커는 SOAP 메시지에서 데이터를 취하여 C 헤더 파일에 맵핑되는 새 메시지를 생성합니다. 이 메시지는 WebSphere MQ를 사용하여 레거시 응용프로그램에 송신됩니다. 레거시 응용프로그램이 응답하고 응답 데이터는 브로커가 생성하는 HTTP 응답에 넣어집니다. 그러므로 브로커는 웹 서비스로 레거시 응용프로그램에서 작동합니다.
Web Service Host 샘플을 실행하려면 다음을 수행하십시오.
레거시 응용프로그램은 C로 작성되며 두 개의 입력 매개변수인 WebSphere MQ 큐 관리자 이름 및 큐 이름으로 시작됩니다. 응용프로그램은 이 큐 및 큐 관리자의 메시지를 읽고 입력 메시지의 응답 정보에 지정된 큐 및 큐 관리자에게 응답을 송신합니다.
두 실행 파일 버전의 레거시 응용프로그램이 제공됩니다.
샘플은 브로커와 같은 WebSphere MQ 큐 관리자를 사용하여 레거시 응용프로그램을 실행하도록 구성됩니다. 브로커가 레거시 응용프로그램에 대해 다른 큐 관리자를 사용할 경우 상호 통신을 위해 WebSphere MQ 큐 관리자(브로커 및 레거시)를 구성합니다.
또한 메시지 플로우 WSHOST_WSHOST1에서 레거시 노드로의 MQOutput을 변경해야 합니다. 기본 등록 정보 큐 관리자 이름을 레거시 응용프로그램 큐 관리자의 이름으로 설정하십시오.입력 및 출력 메시지는 모두 다음 C 구조로 맵핑됩니다.
typedef struct tagIA81CONF { char MessageId[8]; char OrderNumber[8]; char ItemReference[12]; char ItemQuantity[8]; char CustomerNumber[12]; char DeliveryRef[8]; char Confirm[1]; char filler1[3]; } IA81CONF;
이는 WSHOST_LEGACY 프로젝트의 legacyservice.h 파일에서 제공됩니다. 이 헤더 파일에는 기타 구조도 포함되어 있습니다.
이 샘플을 실행하는 데 사용된 모든 테스트 메시지는 다음 형식을 기본으로 합니다.
<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:c="http://www.brokersamplewshost.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <c:IA81CONFIN> <MessageId>IA81CONF</MessageId> <OrderNumber>ON4002</OrderNumber> <ItemReference>IY4003</ItemReference> <ItemQuantity>4</ItemQuantity> <CustomerNumber>CY4004</CustomerNumber> <DeliveryRef> </DeliveryRef> <Confirm> </Confirm> <filler1> </filler1> </c:IA81CONFIN> </soapenv:Body> </soapenv:Envelope>
Web Service Host 샘플은 msg_tagIA81CONF 메시지와 함께 레거시 응용프로그램을 호출합니다. 해당 메시지에서 DeliveryRef 필드는 입력 시 공백으로 설정되고, 출력 시 JOHNCORP로 설정됩니다. 또한 Confirm 필드는 입력 시 공백으로 설정되고, 출력 시 입력 필드 ItemReference에 Y 문자가 포함되어 있는지에 따라 Y 또는 N으로 설정됩니다.
위 입력 메시지의 응답 메시지는 다음과 같습니다.
<?xml version="1.0"?> <tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS1="http://www.brokersamplewshost.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:Body> <NS1:IA81CONFOUT> <MessageId>IA81CONF</MessageId> <OrderNumber>ON4002</OrderNumber> <ItemReference>IY4003</ItemReference> <ItemQuantity>4</ItemQuantity> <CustomerNumber>CY4004</CustomerNumber> <DeliveryRef>JOHNCORP</DeliveryRef> <Confirm>Y</Confirm> <filler1> </filler1> </NS1:IA81CONFOUT> </tns:Body> </tns:Envelope>
Web Service Client 샘플을 실행할 경우, 브로커는 WebSphere MQ 프로토콜을 통해 레거시 형식의 메시지를 수신합니다. 브로커는 HTTP 프로토콜을 사용하여 SOAP/XML 메시지를 보내는 방법으로 웹 서비스를 호출합니다. 그리고 다시 HTTP를 사용하여 SOAP/XML 메시지로서 웹 서비스 응답을 수신하고 MQ를 사용하여 레거시 응답 메시지를 송신합니다. 따라서 브로커는 웹 서비스 클라이언트 역할을 수행합니다.
브로커는 C 헤더 파일에 맵핑되는 레거시 메시지에서 데이터를 취합니다. 이 데이터는 WSDL 파일의 XML 스키마에 맵핑되는 SOAP/XML 메시지를 빌드하는 데 사용됩니다. WSDL 파일은 Web 서비스 호스트에서 제공되어 브로커의 메시지 세트에 반입됩니다. 여기서 Web 서비스 호스트는 Web Service Host 샘플입니다.
이 Web Service Client 샘플을 실행하기 위해서는 Web Service Host 샘플이 실행 중이어야 합니다.
Web Service Client 샘플을 실행하려면 다음을 수행하십시오.
이 샘플을 실행하는 데 사용된 입력 테스트 메시지는 다음 형식을 기본으로 합니다.
typedef struct tagIA81BUY { char MessageId[8]; char OrderNumber[8]; char ItemReference[12]; char ItemQuantity[8]; char CustomerNumber[12]; char DeliveryRef[8]; } IA81BUY;
Web Service Host 메시지 플로우에 송신된 메시지는 다음과 같습니다.
<?xml version="1.0"?> <tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS1="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS2="http://www.brokersamplewshost.ibm.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mrm="http://tempuri.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:Body> <NS2:IA81CONFIN> <MessageId>IA81CONF</MessageId> <OrderNumber>LAB51234</OrderNumber> <ItemReference>ITEM12345678</ItemReference> <ItemQuantity>qty00005</ItemQuantity> <CustomerNumber>CUST34567890</CustomerNumber> <DeliveryRef> </DeliveryRef> <Confirm> </Confirm> <filler1> </filler1> </NS2:IA81CONFIN> </tns:Body> </tns:Envelope>
Web Service Client 메시지 플로우에서 수신된 위 입력 메시지의 응답 메시지는 다음과 같습니다.
<?xml version="1.0"?> <tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS1="http://www.brokersamplewshost.ibm.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:Body> <NS1:IA81CONFOUT> <MessageId>IA81CONF</MessageId> <OrderNumber>LAB51234</OrderNumber> <ItemReference>ITEM12345678</ItemReference> <ItemQuantity>qty00005</ItemQuantity> <CustomerNumber>CUST34567890</CustomerNumber> <DeliveryRef>JOHNCORP</DeliveryRef> <Confirm>N</Confirm> <filler1> </filler1> </NS1:IA81CONFOUT> </tns:Body> </tns:Envelope>
응답 메시지
Web Service Client 메시지 플로우는 위 메시지를 CWF 형식으로 출력합니다. 이는 위에서 정의된 C 구조 tagIA81CONF를 기반으로 합니다. 필드 및 값은 다음과 같습니다.
typedef struct tagIA81CONF { char MessageId[8]; IA81CONF char OrderNumber[8]; LAB5123 char ItemReference[12]; ITEM12345678 char ItemQuantity[8]; qty00005 char CustomerNumber[12]; CUST34567890 char DeliveryRef[8]; JOHNCORP char Confirm[1]; N char filler1[3]; } IA81CONF;