共用方式為


指定 WCF 配接器的訊息內文

您可以使用 WCF 配接器中的 [ 訊息 ] 索引標籤,指定如何從傳入 SOAP 訊息擷取 BizTalk 訊息本文,以及如何將 BizTalk 訊息本文放在傳出 SOAP 訊息中。

指定如何從內送 SOAP 訊息擷取 BizTalk 訊息內文

您可以控制如何從透過 WCF 配接器內送的 SOAP 訊息建立輸入 BizTalk 訊息內文。 下圖顯示 WCF-NetNamedPipe 接收配接器的 [訊息 ] 索引標籤,並傳送配接器作為範例。

WCF 接收配接器中的 [訊息] 索引

WCF 中的 [訊息] 索引標籤會傳送配接

若要指定如何建立 BizTalk 訊息本文,請在上圖的 [ 輸入 BizTalk 訊息本文 ] 區段中選取下列其中一個選項:

  • Envelope -- 整個 < soap:Envelope >。 使用傳入訊息的 SOAP Envelope 元素來建立 BizTalk 訊息本文部分。 整個內送訊息會變成 BizTalk 訊息內文。 您可以使用這個選項,建立合併所有標頭的 BizTalk 訊息內文。

    注意

    SOAP 標頭會放置在訊息內容中,但不會自動升級。 在自訂管線元件中可進行升級。

  • 本文 -- soap:Body > 元素的內容 <。 使用傳入訊息的 SOAP Body 元素內容來建立 BizTalk 訊息本文部分。 如果 Body 元素有一個以上的子元素,則只有第一個元素會成為 BizTalk 訊息內文部分。

  • 路徑 -- 主體路徑所找到的內容。 使用 [ 本文路徑運算式 ] 文字方塊中的本文路徑運算式來建立 BizTalk 訊息本文部分。 內文路徑運算式會依照內送訊息 SOAP Body 元素的直系子元素來進行評估。 當內送訊息有二進位資料時,您可以使用這個選項,讓 BizTalk 訊息內文部分只包含二進位資料,沒有任何標籤。

    選取 [ 路徑 - 主體路徑所找到的內容 ] 選項時,可以將 [節點編碼 ] 屬性設定為在 [ 本文路徑運算式 ] 文字方塊中,為主體路徑運算式所指定的節點指定預期的編碼類型。 如果內文路徑運算式有一個以上相符的項目,只會使用第一個相符項目。

注意

針對 本文路徑運算式 屬性,僅支援適用于 XML 順向處理的 XPath 運算式。 For more information about the XPath expressions available for this property, see "The Best of Both Worlds: Combining XPath with the XmlReader" at https://go.microsoft.com/fwlink/?LinkID=75701.

如果選取 [ 路徑] -- [主體路徑] 選項找到的內容 ,且 [節點編碼 ] 屬性設定為 [字串],WCF 配接器會預期相符節點有 UTF-8 編碼的字元資料。 如果傳入訊息包含 XML 特殊字元的逸出字元資料,例如 < 和 > ,WCF 配接器會在建立 BizTalk 訊息本文元件時還原逸出字元資料。 例如,如果相符的節點已逸出字元資料,例如< FirstName > CONTOSO < /FirstName,WCF >配接器會在輸入 BizTalk 訊息本文中建立< FirstName > CONTOSO < /FirstName >

如果選取 [ 路徑] -- [主體路徑] 選項找到的內容 ,且 [節點編碼 ] 屬性設定為 HexBase64,則相符的節點可以有有效的 BinHexBase64 序列。 如果相符的節點有不正確序列,WCF 用戶端會收到FaultException,錯誤訊息會記錄在BizTalk Server電腦上的事件記錄檔中,而且不會暫停任何訊息。

如果選取 [ 路徑] 選項所找到的內容 ,而 [節點編碼 ] 屬性設定為 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 訊息本文 [內文路徑運算式] 節點編碼
Envelope -- 整個 < soap:Envelope> N/A N/A

如果您如下表所示設定 BizTalk 訊息本文 區段,WCF 配接器會建立輸入的 BizTalk 訊息本文部分,只包含前一個傳入 SOAP 訊息中的 Order 元素。

輸入 BizTalk 訊息本文 [內文路徑運算式] 節點編碼
Body -- soap:Body > 元素的內容 < N/A N/A

如果您如下表所示設定 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 元素應該具有有效的 BinHexBase64 序列。

輸入 BizTalk 訊息本文 [內文路徑運算式] 節點編碼
路徑 -- 內容由內文路徑定位 /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] 十六進位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 元素的內容。 具有 Body 的 WCF 配接器 -- BizTalk 回應訊息本文 (預設值) 選項不允許傳送非 XML 訊息,例如字元資料和點陣圖影像。 您可以使用範本 -- WCF 配接器 範本選項所指定的內容 ,來傳送 以 base64hexstring編碼的非 XML 訊息。

    選取 [範本- 範本所指定的內容] 選項時,您必須在 [ 輸出 WCF 訊息本文 - XML ] 文字方塊中提供任意範本 XML 元素。 範本 XML 元素必須包含下列 bts-msg-body 元素一次,而且只有一次,除非範本 XML 元素保留空白:

<bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="[base64|hex|string|xml]"/>

WCF 配接器會根據 XML 範本中的編碼屬性來 編碼 BizTalk 訊息本文,然後在建立輸出 WCF 訊息時,以編碼的 BizTalk 訊息 本文取代 bts-msg-body 元素。 如果 輸出 WCF 訊息本文 - XML 文字方塊保留空白,WCF 配接器會將 BizTalk 訊息本文編碼為 Base64,然後將 Base64 序列放在輸出 SOAP 訊息本文中。

如果 XML 範本中的 編碼 屬性設定為 字串,WCF 配接器會將 BizTalk 訊息本文部分編碼為 UTF-8 編碼字元資料,其中會逸出和 之類的 <> XML 特殊字元。

如果 XML 範本中的 編碼 屬性設定為 base64十六進位,WCF 配接器會將 BizTalk 訊息本文元件編碼為 BinHexBase64 序列。

如果 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 回應訊息內文 N/A
<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>