BizTalk 組件
Microsoft BizTalk Server 與 .NET Framework 最重要的部分是所有的 BizTalk Server 成品、對應、結構描述、協調流程以及管線都會編譯為 .NET 組件。 此設計的兩個最重要含意是這些組件必須具有強式名稱,因此它們也遵循 .NET 版本管理規則。 其主要含意為,一旦針對另一個 .NET 專案或組件 (包括 BizTalk 專案) 的特定版本建置 BizTalk 專案,該專案會繼續使用此版本,直到再針對較新的版本重新建置它為止。
.NET 版本管理與組件
在開發期間發生的一個與 .NET 版本管理相關之常見問題是,BizTalk 專案上的版本號碼未變更,而且在重新部署組件時,未停止後啟動載入類型的 BizTalk 主控件執行個體。
當再次執行程序時,變更不會生效。 這是由於將 .NET 組件載入記憶體的方式所造成。 因為主控件已經具有組件的記憶體中複本,所以將新複本放入「全域組件快取」時,不會重新載入組件。 例如,若已部署和執行搭配協調流程之 1.0.0.0 版的組件,而協調流程已變更,但是版本號碼未變更,則變更不會生效。 在主控件執行個體停止後,會釋放組件的記憶體中複本,當主控件執行個體再次啟動時,它會重新載入組件的新複本並取得變更。 若已部署新版本,例如 2.0.0.0 版,就會將它載入,然後變更也會生效。
部署組件到 BizTalk Server 是一個包含兩部分的程序。 第一個部分是傳統的 .NET 組件部署,在此會將強式名稱的組件部署到使用組件的每個伺服器上的「全域組件快取」(GAC)。 第二步是將組件的中繼資料及其類型部署到 BizTalk Server 管理資料庫。 當 BizTalk Server 載入 BizTalk Server 組件時,最常使用其強式名稱來載入它們,您可以在管理資料庫中找到這些名稱。
將 BizTalk Server 組件部署到 GAC
開發人員建立的 BizTalk Server 成品會編譯為衍生自內建 BizTalk Server 類型的類別。 例如,協調流程會變成衍生自 Microsoft.BizTalkXLANGs.BTXEngine.BTXService 類別的類別。 這是因為組件中的這些基底類別已部署到「全域組件快取」,而這些組件對 GAC 中的其他組件有相依性,所以開發人員的組件也必須部署到 GAC。
部署到「全域組件快取」的 BizTalk Server 成品也因此必須使用強式名稱的另一個重要含意是,強式名稱的組件不能呼叫其他不是強式名稱的組件。 這表示由開發人員建立以供這些 BizTalk 組件使用的任何組件,也必須使用強式名稱。 同樣的,部署到 GAC 的組件若未使用特定路徑載入其他組件,則必須從 GAC 載入這些組件。
管線元件會新增至 Visual Studio 中的開發人員工具箱,使其可供拖曳至管線設計工具。 將 BizTalk Server 管線編譯為 .NET 組件時,會將管線各個階段中所有元件的資訊編譯為組件。 當此管線部署至BizTalk Server時,元件的相關資訊,包括其檔案名,會插入 BizTalk 管理資料庫,並將管線元件部署至 GAC。 BizTalk 管線元件相依的任何其他元件也必須部署到 GAC,才能在執行時間找到。 管線元件元件必須複製到 BizTalk Server\Pipeline Components 目錄,才能在執行時間由 BizTalk 管線存取,不論元件是否也會部署到 GAC。 管線執行時會載入這些元件,並適時呼叫它們所實作的介面。 如果管線元件元件也會部署到 GAC 中,則元件會在執行時間從 GAC 載入。 如果未小心確保管線元件元件元件在 BizTalk Server\Pipeline Components 目錄和 GAC 中都相同,這可能會導致混淆。