WCF アダプタのメッセージ本文の指定

WCF アダプターの [ メッセージ ] タブを使用すると、受信 SOAP メッセージから BizTalk メッセージ本文を抽出する方法と、BizTalk メッセージ本文を送信 SOAP メッセージに配置する方法を指定できます。

受信 SOAP メッセージからの BizTalk メッセージ本文の抽出方法の指定

WCF アダプタを通じて受信する SOAP メッセージから受信 BizTalk メッセージ本文を作成する方法を制御できます。 次の図は、WCF-NetNamedPipe 受信アダプターと送信アダプターの [ メッセージ ] タブを例として示しています。

WCF の [メッセージ] タブは、アダプター を受信します

58e1d490-5bd9-4571-87b1-4dea6dbfe2deWCF 送信アダプター の

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 アダプターの テンプレート オプションで指定されたテンプレート -- コンテンツ を使用して、 base64hex、または 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>