WCF 어댑터에 대해 메시지 본문 지정
WCF 어댑터의 메시지 탭을 사용하여 들어오는 SOAP 메시지에서 BizTalk 메시지 본문을 추출하는 방법과 BizTalk 메시지 본문을 나가는 SOAP 메시지에 배치하는 방법을 지정할 수 있습니다.
BizTalk 메시지 본문이 들어오는 SOAP 메시지에서 추출되는 방식 지정
WCF 어댑터를 통해 들어오는 SOAP 메시지에서 인바운드 BizTalk 메시지 본문을 만드는 방법을 제어할 수 있습니다. 다음 그림에서는 WCF-NetNamedPipe 수신 어댑터 및 송신 어댑터의 메시지 탭을 예로 보여 줍니다.
의 메시지 탭
의 메시지 탭
BizTalk 메시지 본문을 만드는 방법을 지정하려면 이전 그림의 인바운드 BizTalk 메시지 본문 섹션에서 다음 옵션 중 하나를 선택합니다.
봉투 -- 전체 <soap:Envelope>. 들어오는 메시지의 SOAP Envelope 요소를 사용하여 BizTalk 메시지 본문 부분을 만듭니다. 들어오는 메시지 전체가 BizTalk 메시지 본문이 됩니다. 모든 헤더를 통합하는 BizTalk 메시지 본문을 만들려면 이 옵션을 사용합니다.
참고
SOAP 헤더는 메시지 컨텍스트에 배치되지만 자동으로 승격되지 않습니다. 승격은 사용자 지정 파이프라인 구성 요소에서 수행할 수 있습니다.
본문 -- soap:Body> 요소의 <내용입니다. 들어오는 메시지의 SOAP Body 요소 콘텐츠를 사용하여 BizTalk 메시지 본문 부분을 만듭니다. Body 요소에 자식 요소가 두 개 이상 있는 경우 첫 번째 요소만 BizTalk 메시지 본문 부분이 됩니다.
경로 -- 본문 경로에 따라 있는 콘텐츠입니다. 본문 경로 식 텍스트 상자의 본문 경로 식을 사용하여 BizTalk 메시지 본문 부분을 만듭니다. 본문 경로 식은 들어오는 메시지의 SOAP Body 요소의 직접 자식 요소에 대해 평가됩니다. 들어오는 메시지에 이진 데이터가 있는 경우 BizTalk 메시지 본문에 대해 이 옵션을 사용하여 태그가 없는 이진 데이터만 포함할 수 있습니다.
경로 -- 본문 경로별 콘텐츠 옵션을 선택하면 본문 경로 식 텍스트 상자에서 본문 경로 식으로 지정된 노드에 대해 예상되는 인코딩 유형을 지정하도록 Node 인코딩 속성을 구성할 수 있습니다. 본문 경로 식과 일치하는 요소가 여러 개인 경우 일치하는 첫 번째 요소만 사용됩니다.
참고
본문 경로 식 속성의 경우 XML의 정방향 전용 처리에 적합한 XPath 식만 지원됩니다. 이 속성에 사용할 수 있는 XPath 식에 대한 자세한 내용은 에서 "두 세계의 최고: XPath와 XmlReader 결합" https://go.microsoft.com/fwlink/?LinkID=75701을 참조하세요.
경로 -- 본문 경로별 콘텐츠 옵션이 선택되고 Node 인코딩 속성이 String으로 설정된 경우 WCF 어댑터는 일치하는 노드에 UTF-8로 인코딩된 문자 데이터가 있어야 합니다. 들어오는 메시지에 및 >와 같은 < XML 특수 문자에 대한 이스케이프 문자 데이터가 포함된 경우 WCF 어댑터는 BizTalk 메시지 본문 부분을 만들 때 이스케이프된 문자 데이터를 복원합니다. 예를 들어 일치하는 노드가 FirstName CONTOSO</FirstName>과 같은< 문자 데이터를 이스케>이프한 경우 WCF 어댑터는 인바운드 BizTalk 메시지 본문에 FirstName>CONTOSO</FirstName>을 만듭니<다.
경로 -- 본문 경로별 콘텐츠 옵션을 선택하고 노드 인코딩 속성이 Hex 또는 Base64로 설정된 경우 일치하는 노드에 유효한 BinHex 또는 Base64 시퀀스가 있을 수 있습니다. 일치하는 노드에 잘못된 시퀀스가 있는 경우 WCF 클라이언트는 FaultException을 수신하고, 오류 메시지가 BizTalk Server 컴퓨터의 이벤트 로그에 기록되고, 메시지가 일시 중단되지 않습니다.
경로 -- 본문 경로에 있는 콘텐츠 옵션을 선택하고 Node 인코딩 속성이 XML로 설정된 경우 WCF 어댑터는 본문 경로 식 텍스트 상자에서 본문 경로 식에서 선택한 노드의 외부 XML을 사용하여 BizTalk 메시지 본문을 만듭니다.
일치하는 노드에 Node 인코 딩 속성에 지정된 대로 인코딩된 데이터가 없으면 빈 인바운드 BizTalk 메시지 본문이 만들어집니다.
예를 들어 WCF 송신 어댑터가 WCF 클라이언트로부터 다음과 같은 SOAP 메시지를 받는다고 가정합니다.
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/OrderRefresh</a:Action>
<a:MessageID>urn:uuid:59e74507-66d0-4d50-be70-c3ec248b6f78</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessServiceBizTalk</a:To>
</s:Header>
<s:Body>
<Order xmlns="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
<OrderDetail>
<CustomerID>CONTOSO</CustomerID>
<OrderID>00000000</OrderID>
</OrderDetail>
</Order>
</s:Body>
</s:Envelope>
다음 표와 같이 인바운드 BizTalk 메시지 본문 섹션을 구성하는 경우 이전 수신 SOAP 메시지는 인바운드 BizTalk 메시지 본문 부분이 됩니다.
인바운드 BizTalk 메시지 본문 | 본문 경로 식 | 노드 인코딩 |
---|---|---|
봉투 -- 전체 <soap:Envelope> | 해당 없음 | 해당 없음 |
다음 표와 같이 BizTalk 메시지 본문 섹션을 구성하는 경우 WCF 어댑터는 이전 들어오는 SOAP 메시지의 Order 요소만 포함하도록 인바운드 BizTalk 메시지 본문 부분을 만듭니다.
인바운드 BizTalk 메시지 본문 | 본문 경로 식 | 노드 인코딩 |
---|---|---|
본문 -- soap:Body> 요소의 <내용 | 해당 없음 | 해당 없음 |
다음 표와 같이 BizTalk 메시지 본문 섹션을 구성하는 경우 WCF 어댑터는 본문 경로 식과 일치하는 들어오는 노드에 UTF-8로 인코딩된 문자 데이터가 있을 것으로 예상합니다.
인바운드 BizTalk 메시지 본문 | 본문 경로 식 | 노드 인코딩 |
---|---|---|
경로 -- 본문 경로에서 찾은 내용 | /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] | String |
이전 들어오는 SOAP 메시지의 경우 WCF 어댑터는 CustomerID 요소의 문자 데이터 CONTOSO를 사용하여 인바운드 BizTalk 메시지 본문 부분을 만듭니다.
참고
이전 들어오는 SOAP 메시지에는 XPath, /Order/OrderDetail/CustomerID의 축약된 구문을 사용할 수 없습니다. XPath의 축약된 구문은 네임스페이스에 선언되지 않은 노드를 반환하고 이전 SOAP 메시지의 CustomerID 요소는 기본적으로 네임스페이스에 http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess
선언되기 때문입니다.
다음 표와 같이 BizTalk 메시지 본문 섹션을 구성하는 경우 이전 들어오는 SOAP 메시지의 CustomID 요소에 유효한 BinHex 또는 Base64 시퀀스가 있어야 합니다.
인바운드 BizTalk 메시지 본문 | 본문 경로 식 | 노드 인코딩 |
---|---|---|
경로 -- 본문 경로에서 찾은 내용 | /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] | 16진수 또는 Base64 |
다음 표와 같이 BizTalk 메시지 본문 섹션을 구성하는 경우 WCF 어댑터는 테이블 뒤의 코드에 표시된 것처럼 이전 들어오는 SOAP 메시지에 대한 인바운드 BizTalk 메시지 본문을 만듭니다.
인바운드 BizTalk 메시지 본문 | 본문 경로 식 | 노드 인코딩 |
---|---|---|
경로 -- 본문 경로에서 찾은 내용 | /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] | XML |
<CustomerID xmlns="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">CONTOSO</CustomerID>
아웃바운드 WCF 메시지 본문의 소스 지정
BizTalk 메시지 본문에서 WCF 어댑터를 통해 보낼 아웃바운드 WCF 메시지 본문을 만드는 방법을 제어할 수 있습니다. BizTalk 메시지 본문을 아웃바운드 WCF 메시지 본문에 배치하는 방법을 지정하려면 이전 섹션의 그림과 같이 메시지 탭의 아웃바운드 WCF 메시지 본문 섹션에서 다음 옵션 중 하나를 사용할 수 있습니다.
본문 -- BizTalk 응답 메시지 본문입니다. BizTalk 메시지 본문 부분을 사용하여 보내는 메시지에 대한 SOAP Body 요소의 콘텐츠를 만듭니다. 나가는 BizTalk 메시지 본문이 아웃바운드 SOAP 메시지 본문이 됩니다.
템플릿 -- 템플릿으로 지정된 콘텐츠입니다. XML 텍스트 상자에 제공된 템플릿을 사용하여 보내는 메시지에 대한 SOAP Body 요소의 콘텐츠를 만듭니다. 본문이 있는 WCF 어댑터 -- BizTalk 응답 메시지 본문 (기본값) 옵션은 문자 데이터 및 비트맵 이미지와 같은 비 XML 메시지를 보내는 것을 허용하지 않습니다. WCF 어댑터 에 대한 템플릿 -- 템플릿 옵션으로 지정된 콘텐츠를 사용하여 base64, 16진수 또는 문자열로 인코딩된 비 XML 메시지를 보낼 수 있습니다.
템플릿 -- 템플릿으로 지정된 콘텐츠를 선택하면 아웃바운드 WCF 메시지 본문 - XML 텍스트 상자에 임의의 템플릿 XML 요소를 제공해야 합니다. 템플릿 XML 요소가 비어 있지 않은 한 템플릿 XML 요소는 다음 bts-msg-body 요소를 한 번만 포함해야 합니다.
<bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="[base64|hex|string|xml]"/>
WCF 어댑터는 XML 템플릿의 인코딩 특성에 따라 BizTalk 메시지 본문을 인코딩한 다음 아웃바운드 WCF 메시지를 만들 때 bts-msg-body 요소를 인코딩된 BizTalk 메시지 본문으로 바꿉니다. 아웃바운드 WCF 메시지 본문 - XML 텍스트 상자가 비어 있는 경우 WCF 어댑터는 Base64에서 BizTalk 메시지 본문을 인코딩한 다음 Base64 시퀀스를 아웃바운드 SOAP 메시지 본문에 배치합니다.
XML 템플릿의 인코딩 특성이 문자열로 설정된 경우 WCF 어댑터는 BizTalk 메시지 본문 부분을 UTF-8로 인코딩된 문자 데이터로 인코딩합니다. 이 데이터에서는 와 > 같은 < XML 특수 문자가 이스케이프됩니다.
XML 템플릿의 인코딩 특성이 base64 또는 16진수로 설정된 경우 WCF 어댑터는 BizTalk 메시지 본문 부분을 BinHex 또는 Base64 시퀀스로 인코딩합니다.
XML 템플릿의 인코딩 특성이 xml로 설정된 경우 WCF 어댑터는 bts-msg-body 요소를 아웃바운드 BizTalk 메시지 본문으로 바꿔 나가는 WCF 메시지를 만듭니다.
예를 들어 WCF 어댑터가 다음과 같은 BizTalk 메시지 본문을 WCF 클라이언트에 보내야 한다고 가정합니다.
<ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
<ns0:OrderDetail>
<ns0:CustomerID>CONTOSO</ns0:CustomerID>
<ns0:OrderID>01A2c</ns0:OrderID>
</ns0:OrderDetail>
</ns0:Order>
다음 표와 같이 아웃바운드 WCF 메시지 본문 섹션을 구성하는 경우 WCF 어댑터는 테이블 뒤의 코드에 표시된 대로 아웃바운드 WCF 메시지를 만듭니다.
아웃바운드 WCF 메시지 본문 | XML |
---|---|
본문 -- BizTalk 응답 메시지 본문 | 해당 없음 |
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/Request</a:Action>
<a:MessageID>urn:uuid:6a706a54-c4f5-4767-909d-a992c7c26dba</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessService</a:To>
</s:Header>
<s:Body>
<ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
<ns0:OrderDetail>
<ns0:CustomerID>CONTOSO</ns0:CustomerID>
<ns0:OrderID>01A2c</ns0:OrderID>
</ns0:OrderDetail>
</ns0:Order>
</s:Body>
</s:Envelope>
다음 표와 같이 아웃바운드 WCF 메시지 본문 섹션을 구성하는 경우 WCF 어댑터는 테이블 뒤의 코드에 표시된 대로 아웃바운드 WCF 메시지를 만듭니다.
아웃바운드 WCF 메시지 본문 | XML |
---|---|
본문 -- BizTalk 응답 메시지 본문 | <Book><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="string"/></Book> |
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/Request</a:Action>
<a:MessageID>urn:uuid:05dde292-eedd-467e-b0d2-f1b8f0757410</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessService</a:To>
</s:Header>
<s:Body>
<Book><ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess"> <ns0:OrderDetail> <ns0:CustomerID>CONTOSO</ns0:CustomerID> <ns0:OrderID> 01A2c</ns0:OrderID> </ns0:OrderDetail></ns0:Order>
</Book>
</s:Body>
</s:Envelope>
다음 표와 같이 아웃바운드 WCF 메시지 본문 섹션을 구성하는 경우 WCF 어댑터는 테이블 뒤의 코드에 표시된 것처럼 아웃바운드 WCF 메시지를 만듭니다.
아웃바운드 WCF 메시지 본문 | XML |
---|---|
본문 -- BizTalk 응답 메시지 본문 | <Book><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="base64"/></Book> |
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://ww
w.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe
/OrderProcess/IOrderProcess/Request</a:Action>
<a:MessageID>urn:uuid:cb3cac6d-a542-4a90-bad8-cdbfa8251112</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessSer
vice</a:To>
</s:Header>
<s:Body>
<Book>77u/PG5zMDpPcmRlciB4bWxuczpuczA9Imh0dHA6Ly9NaWNyb3NvZnQuU2FtcGxlcy5CaX
pUYWxrLk5ldE5hbWVkUGlwZS9PcmRlclByb2Nlc3MiPg0KICA8bnMwOk9yZGVyRGV0YWlsPg0KICAgID
xuczA6Q3VzdG9tZXJJRD5DT05UT1NPPC9uczA6Q3VzdG9tZXJJRD4NCiAgICA8bnMwOk9yZGVySUQ+MD
FBMmM8L25zMDpPcmRlcklEPg0KICA8L25zMDpPcmRlckRldGFpbD4NCjwvbnMwOk9yZGVyPg==</Book
>
</s:Body>
</s:Envelope>
다음 표와 같이 아웃바운드 WCF 메시지 본문 섹션을 구성하는 경우 WCF 어댑터는 테이블 뒤의 코드에 표시된 것처럼 아웃바운드 WCF 메시지를 만듭니다.
아웃바운드 WCF 메시지 본문 | XML |
---|---|
본문 -- BizTalk 응답 메시지 본문 | <Book><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="xml"/></Book> |
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/Request</a:A
ction>
<a:MessageID>{513C123C-0600-4A1C-BEE2-EF83E0EFEB15}</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessServiceBizTalk</a:To>
</s:Header>
<s:Body>
<Book>
<ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
<ns0:OrderDetail>
<ns0:CustomerID>CustomerID_0</ns0:CustomerID>
<ns0:OrderID>OrderID_0</ns0:OrderID>
</ns0:OrderDetail>
</ns0:Order>
</Book>
</s:Body>
</s:Envelope>