管線元件中的結構描述解析
管線解譯器和組合器元件使用 XSD 結構描述來處理訊息。 此類結構描述包含如升級屬性清單、辨別欄位、一般檔案訊息的註解以及 XML 封套的註解等資訊。
標準解譯器和組合器元件使用結構描述類型名稱及訊息類型以支援擷取部署的結構描述。 部分元件使用結構描述類型名稱和訊息類型來擷取,而其他元件 (例如,一般檔案解譯器) 則僅使用結構描述類型來擷取。
接收 XML 訊息的管線元件以檢查訊息根項目和命名空間的方式來判斷訊息。 例如,下列 XML 的訊息類型為 http://MyDocument.org#MyDocument
。
<ns0:MyDocument xmlns:ns0="http://MyDocument.org">
</ns0:MyDocument>
如果架構沒有為其定義的命名空間,訊息類型為 「 <rootNode> 」。 例如,若先前的範例 XML 沒有命名空間,則訊息類型是 "MyDocument"。
標準管線元件使用訊息類型從資料庫擷取適當的結構描述。 預設 XML 接收和傳送管線永遠會使用在執行階段從訊息 XML 內容動態探索到的訊息類型,判斷要載入哪個結構描述 (除非管線元件設定為允許無法辨識的訊息)。 XML 解譯器透過使用此機制可移除訊息信封,不過,若 XML 組合器不知道要使用何種信封結構描述,則無法建立外寄訊息的信封。
您要在管線設計師內的 XML 組合器的組態屬性中指定信封結構描述。
結構描述解析的方式
假設您未直接在 XmlDisassembler 中指定結構描述,結構描述會以下列方式進行解析:
首先,使用根節點名稱和命名空間 (來建立已部署架構的不限定搜尋,
http://MyNamespace#MyRoot
例如) 。 如果找到唯一的符合項目,則會解析該結構描述。 如果找到多個符合項目,這些項目只有版本號碼不同,且只有一個是作用中,則會使用該版本,並解析該結構描述。 如果相同的結構描述在多個應用程式中都是作用中,則會找到多個作用中的結構描述,搜尋就會繼續執行下列步驟 2。如果步驟 1 無法解析多個相符專案,則搜尋是由管線執行所在的元件所限定。 如果在管線執行所在的相同元件中找到唯一的架構,則會解析架構。
如果仍然沒有符合的項目,就會使用發行者來解析結構描述。 搜尋可使用根節點、命名空間和公開金鑰 Token 縮小範圍。 如果使用此搜尋找到唯一的結構描述,則會解析該結構描述。
無法解析結構描述。 傳回錯誤,指出找不到唯一的結構描述。
如需其他考慮,包括架構解析上SQL Server定序和區分大小寫的影響,請參閱命名空間管理。
若要在 XML 組合器中建立信封或在一般檔案組合器中建立標頭和結尾,可執行下列其中一個動作:
在 XML 組合器的組態屬性中建立自訂傳送管線以及指定信封的結構描述。 這要在管線設計師中完成。
在 [BizTalk Server 管理] 主控台中,為傳送埠上的傳送管線屬性指定 XMLTransmit。 在 [EnvelopeDocSpecNames] 屬性中,按一下省略符號以設定管線屬性並指定信封的結構描述。
若相同結構描述的數個版本有意或無意地部署到資料庫中 (例如,並存部署或多個實例沒有唯一訊息類型),則依訊息類型解析結構描述可能無法運作。 若依訊息類型解析結構描述失敗,則會在事件日誌中加入 "schema ambiguity" (結構描述模擬兩可) 錯誤。 若要確保依訊息類型解析結構描述成功,請執行下列其中一個動作:
在與自訂管線相同的 BizTalk 專案中定義結構描述。
使用與包含管線的組件相同的金鑰簽署具有結構描述的組件。
明確指定管線元件中的結構描述 (訊息類型名稱在整個 BizTalk 管理資料庫上應為唯一)。
重要
當相同組件中的結構描述共用訊息類型時,不可在同一個管線元件組件中包含結構描述,因為模擬兩可解析有其限制,相反地,而是要參考管線元件組件外的結構描述。 即使在自訂管線的管線元件中已明確指定結構描述類型名稱,但是只要結構描述和管線元件在相同組件中,模擬兩可解析就不能運作。
注意
使用 IPipelineCoNtext 取得已部署架構的自訂管線元件,只有在執行時間未為元件指定架構類型名稱時,才應該依架構類型取得架構,而且只有在執行元件時無法使用架構類型資訊時,才會依訊息類型取得架構。