EnvelopeProcessing 範例示範如何在 BizTalk Server 管線中處理訊息和訊息信封。 此外,它會示範如何將一般檔案訊息處理成 XML 訊息。
此範例的用途
此範例會將 EnvInput 資料夾設定為接收位置。 當您放置檔案,例如範例檔案 EnvelopeProcessing_in.txt,在此資料夾中,BizTalk Server 會使用下列步驟處理此檔案中的訊息:
BizTalk Server 會從接收位置資料夾 EnvInput 擷取訊息檔案。
在接收管線中,平面檔案反組譯工具管線元件會從平面檔案訊息中移除標頭和尾碼,並將其解析成單個訊息。
在 MessageBox 資料庫中,訊息會使用訂用帳戶篩選器路由傳送至傳送埠。
在傳送埠的傳送管線中,XML 組合器管線元件會將訊息包裝在 XML 信封中,然後將訊息放入傳送配接器資料夾 EnvOutput 中。
此範例的設計方式和原因
此範例的設計必須符合兩個基本需求:
接收及處理包含一或多個採購單的純文字檔訊息。
將包含一個採購單和傳送者資訊的 XML 訊息傳送至目錄,以供後端處理系統取貨。
為了符合這些需求,使用了一般檔案/XML 架構和自定義管線的組合。 下表摘要說明這些和其他設計元素。
| 設計元素 | 已選擇的原因 |
|---|---|
| 自訂接收管線 | - 使用一般檔案反組譯器和一般檔案架構來轉譯輸入採購單訊息。 |
| 訊息標頭、本文和預告片的一般檔案架構 | - 定義所有與 XML 架構相同的記錄和欄位特性(包括結構),並提供一個機制來定義將一般檔案實例訊息轉譯成對等的 XML 實例訊息所需的所有一般檔案特性(反之亦然)。 - 標頭、本文和結尾架構用於將本文分割成離散區塊進行處理。 |
| 信封架構 | - 用來包裝具有標頭信息的個別採購單。 |
| 訂用帳戶篩選器 | - 訂閱篩選條件會根據屬性字段擷取符合一或多個準則的訊息,以執行實際的路由。 |
| 自定義傳送管線 | - 使用 XML 組合器和信封和本文架構的組合,將實例訊息轉譯成 XML 格式。 |
下列考慮適用於此範例的設計。
一般檔案架構 (PO.xsd) 包含描述採購單一檔案結構的擴充批注。 您可以手動建立這些檔案,但許多檔案都可以使用一般檔案精靈來產生。
採購單(PO.xsd)扁平檔案架構會使用 elementFormDefault 預設值為 Unqualified。 這會產生正確的結果,但具有額外且非預期的 xmlns 限定。 使用 Qualified 的 elementFormDefault 來避免此問題。
標頭和結尾的平面檔案結構用於將訊息的標頭和結尾資料分開。 一般檔案反組譯工具標頭、檔和預告片架構屬性分別設定為標頭、採購單和預告片架構。
XML 信封架構會結合標頭和採購單中的元素,以產生單一 XML 訊息。 標頭架構會將Source欄位升級至 BTS.bts_system_properties 命名空間中的SourceParty字段;信封架構會提升這個相同的值,使其降級為輸出訊息。
尋找此範例的位置
<Samples Path>\Pipelines\AssemblerDisassembler\EnvelopeProcessing\
下表顯示此範例中的檔案,並描述其用途。
| 檔案 | 說明 |
|---|---|
| Cleanup.bat | 用來取消部署元件,並從全域程式集緩存中移除它們。 拿掉傳送和接收埠。 視需要移除 Microsoft Internet Information Services (IIS) 虛擬目錄。 |
| EnvelopeProcessing.btproj, EnvelopeProcessing.sln | 此範例的專案和方案檔。 |
| EnvelopeProcessing_in.txt | 範例輸入檔。 |
| Header.xsd、PO.xsd、Trailer.xsd | 一般檔案標頭、本文和預告片的架構分別。 |
| XmlEnvelope.xsd | 輸出 XML 信封的架構。 |
| EnvReceivePipeline.btp、EnvSendPipeline.btp | BizTalk Server 會分別接收和傳送具有一般檔案反組譯程式和 XML 組合器管線元件的管線檔案。 |
| EnvelopeProcessingBinding.xml | 用於自動化設定,例如埠系結。 |
| Setup.bat | 用來建置和初始化此範例。 |
如何使用此範例
使用此範例作為您自己的一般檔案處理解決方案的基礎。 您可以擴充此範例中使用的許多設計元素,以符合您自己的需求。 一些範例如下所示:
除了 XML 版本之外,更新範例以撰寫每個採購單的平面檔案版本。 您可以建立新的自定義傳送管線,並使用一般檔案組合器來執行此動作。 在 [一般檔案組合器] 上,指定一般檔案標頭、採購單和預告片架構。 在傳送埠中使用時,會產生具有標頭/結尾資訊的個別採購單。
使用採購單中的詳細信息來增強信封。 若要將其他資訊寫入輸出訊息,請使用「Quick Promote」,將「寄送至」名稱或其他欄位升階,然後將欄位新增至信封,再將信封中的欄位升階至相同欄位。 當訊息透過組合器處理時,已升級的屬性會被降級,並複製到輸出訊息中。
建置和初始化此範例
要建置並初始化 EnvelopeProcessing 範例
在命令視窗中,瀏覽至下列資料夾:
<範例 Path>\Pipelines\AssemblerDisassembler\EnvelopeProcessing
執行檔案 Setup.bat,其會執行下列動作:
在資料夾中建立此範例的輸入 (EnvInput) 和輸出 (EnvOutput) 資料夾:
<範本路徑>\Pipelines\AssemblerDisassembler\EnvelopeProcessing\
編譯及部署此範例的Visual Studio專案。
建立並系結 BizTalk Server 接收位置,以及傳送和接收埠。
這個範例會在建立和系結埠時顯示下列警告:
Warning: Receive handler not specified for receive location "EnvelopeProcessing_RL"; updating with first receive handler with matching transport type. Warning: Host not specified for orchestration "EnvelopeProcessing"; updating with first available host.您可以放心地忽略這些警告。 (為了因應使用者安裝中可能的命名差異,已從系結檔案省略主機名和接收處理程式。
啟用接收位置,並啟動傳送埠。
備註
您應該先確認 BizTalk Server 在建置和初始化程式期間未報告任何錯誤,然後再嘗試執行此範例。
備註
如果您選擇在此範例中開啟並建置專案而不執行 Setup.bat,您必須先使用 .NET Framework 強名稱公用程式建立強名稱密鑰組(sn.exe)。 使用此金鑰組簽署產生的元件。
備註
若要復原 Setup.bat所做的變更,請執行 Cleanup.bat。 您必須在第二次執行 Setup.bat 之前執行 Cleanup.bat。
執行此範例
執行 EnvelopeProcessing 範例
將檔案的複本 EnvelopeProcessing_in.txt 放入 EnvInput 資料夾中。
觀察 EnvOutput 資料夾中建立的三個 .xml 檔案。 這些 .xml 檔案的名稱是以其訊息標識碼 GUID 為基礎。 它們包含從輸入檔擷取並包裝在信封中的訊息。
此範例中使用的類別或方法
組態腳本 Setup.bat 和 Cleanup.bat 依賴下列系統管理 Windows Management Instrumentation (WMI) 腳本:
啟動發送端口\StartSendPort.vbs
啟用接收位置\EnableRecLoc
移除傳送埠\RemoveSendPort
安裝程式和清除批處理檔會使用 BTSTask,如下所示:
BTSTask ImportBindings 以套用系結檔案並建立應用程式、埠和系結
BTSTask RemoveApp 以移除 FlatFileReceiveApplication
另請參閱
Pipelines-AssemblerDisassembler (BizTalk Server Samples 資料夾)