次の方法で共有


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

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

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

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

WCF の受信アダプターの [メッセージ] タブ)

WCF 送信アダプター の [メッセージ] タブ

BizTalk メッセージ本文を作成する方法を指定するには、前の図の [受信 BizTalk メッセージ本文 ] セクションで次のいずれかのオプションを選択します。

  • 封筒 -- <全体soap:Envelope>。 受信メッセージの SOAP エンベロープ 要素を使用して、BizTalk メッセージ本文パーツを作成します。 受信メッセージ全体が BizTalk メッセージ本文になります。 このオプションを使用して、すべてのヘッダーを組み込んだ BizTalk メッセージ本文を作成します。

    SOAP ヘッダーはメッセージ コンテキストに配置されますが、自動的には昇格されません。 昇格は、カスタム パイプライン コンポーネントで実行できます。

  • Body -- <soap:Body> 要素の内容。 受信メッセージの SOAP Body 要素のコンテンツを使用して、BizTalk メッセージ本文パーツを作成します。 Body 要素に複数の子要素がある場合、最初の要素のみが BizTalk メッセージ本文パーツになります。

  • パス -- 本文パスで特定されたコンテンツ。 [本文パス式] テキスト ボックスの 本文パス式 を使用して、BizTalk メッセージ本文パーツを作成します。 本文パス式は、受信メッセージの SOAP Body 要素の直接の子要素に対して評価されます。 受信メッセージにバイナリ データがある場合は、BizTalk メッセージ本文にこのオプションを使用して、タグのないバイナリ データのみを含めることができます。

    [Path -- 本文パスで見つかったコンテンツ] オプションが選択されている場合、Node エンコードプロパティを構成して、本文パス式テキストボックス内の本文パス式で指定されたノードに対して想定されるエンコードの種類を指定できます。 本文パス式が複数の要素と一致する場合は、最初に一致した要素のみが使用されます。

本文パス式プロパティでは、XML の前方専用処理に適した XPath 式のみがサポートされます。 このプロパティで使用できる XPath 式の詳細については、 https://go.microsoft.com/fwlink/?LinkID=75701の「The Best of Both Worlds: Combining XPath with the XmlReader」を参照してください。

[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 エンコード プロパティが 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:Envelope> なし なし

次の表に示すように BizTalk メッセージ本文 セクションを構成する場合、WCF アダプターは、前の受信 SOAP メッセージの Order 要素のみを含む受信 BizTalk メッセージ本文部分を作成します。

受信される BizTalk メッセージの本文 ボディパス式 ノード エンコード
Body -- <soap:Body> 要素の内容 なし なし

次の表に示すように BizTalk メッセージ本文 セクションを構成する場合、WCF アダプターは、本文パス式が一致する受信ノードに UTF-8 でエンコードされた文字データがあることを想定しています。

受信された BizTalk メッセージの本文 ボディパス式 ノード エンコード
パス -- 本文パスによって配置されたコンテンツ /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] ストリング

前の受信 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 進数 または ベース64

次の表に示すように 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 アダプターのテンプレート オプションで指定されたコンテンツを使用して、base64hex、または文字列でエンコードされた XML 以外のメッセージを送信できます。

    [テンプレート - テンプレートで指定されたコンテンツ] オプションが選択されている場合は、[送信 WCF メッセージ本文 - XML] テキスト ボックスに任意のテンプレート XML 要素を指定する必要があります。 テンプレート XML 要素は、テンプレート XML 要素が空のままでない限り、次 の bts-msg-body 要素を 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 テンプレートの エンコード 属性が 文字列に設定されている場合、WCF アダプターは BizTalk メッセージ本文部分を UTF-8 でエンコードされた文字データとしてエンコードし、 < や > などの XML 特殊文字をエスケープします。

XML テンプレートの エンコード 属性が base64 または 16 進数に設定されている場合、WCF アダプターは BizTalk メッセージ本文部分を BinHex または Base64 シーケンスとしてエンコードします。

XML テンプレートの エンコード 属性が xml に設定されている場合、WCF アダプターは送信 WCF メッセージを作成する送信 BizTalk メッセージ 本文に bts-msg-body 要素を置き換えます。

たとえば、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>