WCF アダプタのメッセージ本文の指定
WCF アダプターの [ メッセージ ] タブを使用すると、受信 SOAP メッセージから BizTalk メッセージ本文を抽出する方法と、BizTalk メッセージ本文を送信 SOAP メッセージに配置する方法を指定できます。
受信 SOAP メッセージからの BizTalk メッセージ本文の抽出方法の指定
WCF アダプタを通じて受信する SOAP メッセージから受信 BizTalk メッセージ本文を作成する方法を制御できます。 次の図は、WCF-NetNamedPipe 受信アダプターと送信アダプターの [ メッセージ ] タブを例として示しています。
を受信します
WCF 送信アダプター の
BizTalk メッセージ本文の作成方法を指定するには、前の図の [受信 BizTalk メッセージ本文 ] セクションで次のいずれかのオプションを選択します。
封筒 -- soap:Envelope> 全体<。 受信メッセージの SOAP Envelope 要素を使用して、BizTalk メッセージ本文パーツを作成します。 受信メッセージ全体が BizTalk メッセージ本文になります。 このオプションは、すべてのヘッダーを組み込んで BizTalk メッセージ本文を作成する場合に使用します。
Note
SOAP ヘッダーはメッセージ コンテキストに配置されますが、自動的に昇格されません。 昇格は、カスタム パイプライン コンポーネントで行うことができます。
Body -- soap:Body> 要素の<内容。 受信メッセージの SOAP Body 要素の内容を使用して、BizTalk メッセージ本文パーツを作成します。 Body 要素に複数の子要素がある場合、最初の要素のみが BizTalk メッセージ本文パーツになります。
パス -- 本文パスによって配置されたコンテンツ。 [本文パス式] テキスト ボックスの 本文パス式 を使用して、BizTalk メッセージ本文パーツを作成します。 本文パス式は、受信メッセージの SOAP Body 要素の直接の子要素に対して評価されます。 受信メッセージにバイナリ データが含まれている場合は、BizTalk メッセージ本文にこのオプションを使用して、タグなしのバイナリ データだけを含めることができます。
[Path -- content located by body path]\(本文パスによって配置されるコンテンツ\) オプションが選択されている場合、[本文パス式] テキスト ボックスで本文パス式で指定されたノードに対して想定されるエンコードの種類を指定するように Node エンコード プロパティを構成できます。 本文のパス式が複数の要素に一致する場合は、最初に一致した要素のみが使用されます。
Note
本文パス式プロパティでは、XML の前方専用処理に適した XPath 式のみがサポートされます。 このプロパティで使用できる XPath 式の詳細については、「The Best of Both Worlds: Combining XPath with the XmlReader」 https://go.microsoft.com/fwlink/?LinkID=75701を参照してください。
[ Path -- content located by body path]\(本文パスによって配置されたコンテンツ\) オプションが選択され、 Node encoding プロパティが String に設定されている場合、WCF アダプターは、一致するノードに UTF-8 でエンコードされた文字データがあることを想定します。 受信メッセージに および >などの < XML 特殊文字のエスケープ文字データが含まれている場合、WCF アダプターは、BizTalk メッセージ本文パーツの作成時にエスケープされた文字データを復元します。 たとえば、一致するノードに FirstName>CONTOSO</FirstName> などの<文字データがエスケープされている場合、WCF アダプターは受信 BizTalk メッセージ本文に FirstName>CONTOSO</FirstName を>作成<します。
[Path -- content located by body path]\(本文パスで配置されたコンテンツ\) オプションを選択し、Node encoding プロパティが Hex または Base64 に設定されている場合、一致するノードは有効な BinHex または Base64 シーケンスを持つことができます。 一致したノードに無効なシーケンスがある場合、WCF クライアントは FaultException を受け取り、BizTalk Server コンピューターのイベント ログにエラー メッセージが記録され、メッセージは中断されません。
[ Path -- content located by body path]\(本文パスで配置されたコンテンツ\) オプションが選択され、[ Node encoding]\(ノード エンコード \) プロパティが 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 全体 <:封筒> | 該当なし | 該当なし |
次の表に示すように BizTalk メッセージ本文 セクションを構成した場合、WCF アダプターは、前の受信 SOAP メッセージの Order 要素のみを含む受信 BizTalk メッセージ本文パーツを作成します。
受信 BizTalk メッセージ本文 | 本文のパス式 | [ノード エンコード] |
---|---|---|
Body -- soap:Body> 要素の<内容 | 該当なし | 該当なし |
次の表に示すように BizTalk メッセージ本文 セクションを構成した場合、WCF アダプターは、本文パス式が一致する受信ノードに UTF-8 でエンコードされた文字データがあることを想定しています。
受信 BizTalk メッセージ本文 | 本文のパス式 | [ノード エンコード] |
---|---|---|
[パス -- 本文のパスで見つかったコンテンツ] | /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] | String |
前の受信 SOAP メッセージの場合、WCF アダプターは CustomerID 要素の文字データ CONTOSO を使用して、受信 BizTalk メッセージ本文パーツを作成します。
Note
前の受信 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 メッセージ本文の送信元の指定
WCF アダプタを通じて送信される BizTalk メッセージ本文から送信 WCF メッセージ本文を作成する方法を制御できます。 BizTalk メッセージ本文を送信 WCF メッセージ本文に配置する方法を指定するには、前のセクションの図に示すように、[メッセージ] タブの [送信 WCF メッセージ本文] セクションで次のいずれかのオプションを使用できます。
本文 -- BizTalk 応答メッセージ本文。 BizTalk メッセージ本文パーツを使用して、送信メッセージの SOAP Body 要素のコンテンツを作成します。 送信 BizTalk メッセージ本文が、送信 SOAP メッセージの本文になります。
テンプレート -- テンプレートで指定されたコンテンツ。 XML テキスト ボックスに指定されたテンプレートを使用して、送信メッセージの SOAP Body 要素の内容を作成します。 [本文] の WCF アダプター -- BizTalk 応答メッセージ本文 (既定値) オプションでは、文字データやビットマップ イメージなどの XML 以外のメッセージを送信することはできません。 WCF アダプターの テンプレート オプションで指定されたテンプレート -- コンテンツ を使用して、 base64、 hex、または string でエンコードされた XML 以外のメッセージを送信できます。
[テンプレートで指定されたコンテンツ] オプションが選択されている場合は、[送信 WCF メッセージ本文 - XML] テキスト ボックスに任意のテンプレート XML 要素を指定する必要があります。 テンプレート XML 要素は、テンプレート XML 要素が空のままでない限り、次の bts-msg-body 要素を 1 回、1 回だけ含む必要があります。
<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 アダプターは、BizTalk メッセージ本文を Base64 でエンコードし、Base64 シーケンスを送信 SOAP メッセージ本文に配置します。
XML テンプレートのエンコード属性が string に設定されている場合、WCF アダプターは BizTalk メッセージ本文部分を UTF-8 でエンコードされた文字データとしてエンコードします。この部分では、 や > などの < XML 特殊文字がエスケープされます。
XML テンプレートの エンコード 属性が base64 または hex に設定されている場合、WCF アダプターは BizTalk メッセージ本文部分を BinHex または Base64 シーケンスとしてエンコードします。
XML テンプレートの エンコード 属性が xml に設定されている場合、WCF アダプターは、送信 WCF メッセージを作成するために 、bts-msg-body 要素を送信 BizTalk メッセージ本文に置き換えます。
たとえば、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>