MQSCorrelationSetOrchestration (BizTalk Server 範例)
MQSCorrelationSetOrchestration 範例會示範如何使用 MQSeries 相互關聯識別項,將傳送至 MQSeries 佇列的相互關聯訊息送回到執行中的協調流程。 協調流程會使用 MQMD_CorrelId 和 MQMD_MsgID 屬性來設定 MQSeries 相互關聯識別碼和訊息識別碼值。 MQSeries 佇列管理員會將 MessageID 值複製到訊息的 CorrelationID 屬性。
必要條件
此範例假設您已在執行BizTalk Server的相同伺服器上安裝 IBM WebSphere MQSeries。
此範例的用途
此範例會示範如何在傳送至 IBM WebSphere MQSeries Server 的訊息中,設定訊息識別項和相互關聯識別項。 這是將訊息相互關聯回執行中之協調流程執行個體的一種方法。 MQSeries 佇列管理員在收到訊息時,便會將 MessageID 值複製到訊息的 CorrelationID 屬性。 此 CorrelationID (MQMD_CorrelId) 接著用於協調流程,將 MQSeries 上的回應訊息與用來將訊息傳送至 MQSeries 的實例產生關聯。
此範例的設計方式和原因
這個範例所示範的實例中,將由協調流程處理的文件可以傳送至 MQSeries 佇列 (假設會進行其他處理),並會傳回到執行中的協調流程。
可在何處找到此範例
< 範例 Path >\AdaptersUsage\MQSeriesAdapter\MQSCorrelationSetOrchestration
下表顯示此範例中的檔案,並描述其用途。
檔案 | 說明 |
---|---|
MQSCorrelationSetOrchestration.btproj、 MQSCorrelationSetOrchestration.sln |
應用程式的專案和方案檔。 |
MQSCorrelationSetOrchestration.odx | 應用程式的協調流程。 |
MQSCorrelationSetOrchestration.snk | 強式命名金鑰檔。 |
Setup.bat | 建置並初始化此範例。 |
如何使用此範例
如果需要將訊息傳送至 MQSeries Server 以做為整體工作流程中的一個步驟,請併入此範例中所採用的邏輯。
若要透過 WebSphere MQ Explorer 建立 MQSeries 佇列
按一下 [開始],指向 [ 程式],指向 [IBM WebSphere MQ],然後按一下 [ WebSphere MQ 總管]。
按兩下 [ 佇列管理員],然後按兩下預設佇列管理員。 預設佇列管理員通常會命名為QM_ < machine_name >其中machine_name是您電腦的名稱。
以滑鼠右鍵按一下 [ 佇列],指向 [ 新增],然後按一下 [ 本機佇列]。
在 [建立本機佇列 ] 對話方塊的 [ 佇列名稱] 中,輸入 「MQCorrelation」,然後按一下 [ 確定]。
建立接收位置與 MQSeries 佇列
開啟 BizTalk Server 管理主控台。
依序展開 [BizTalk Server管理]、[BizTalk 群組]、[應用程式] 和 [必要應用程式]。
以滑鼠右鍵按一下 [接收埠],指向 [ 新增],然後按一下 [單向接收埠]。
在 [ 單向接收埠屬性 ] 對話方塊中,于 [ 名稱 ] 方塊中輸入 「MQIn」,然後按一下 [ 確定]。
在左窗格中,按一下 [ 接收位置] 索引標籤,然後按一下 [ 新增]。
在 [ 接收位置屬性 ] 對話方塊的 [ 名稱 ] 方塊中,輸入 「MQIn」。
在 [ 傳輸類型] 方塊中,選取 [MQSeries]。
在 [ 接收處理常式] 方塊中,選取 [BizTalkServerApplication]。
在 [ 接收管線 ] 方塊中,選取 [Microsoft.BizTalk.DefaultPipelines.PassThruReceive]。
按一下 [設定] 。
在 [ MQSeries 傳輸屬性 ] 對話方塊的 [ 輪詢間隔 ] 方塊中,輸入 「10」。
在 [ 佇列定義 ] 方塊中,按一下省略號 (...) 按鈕。
在 [ 佇列定義 ] 對話方塊的 [ 伺服器名稱 ] 方塊中,輸入您的電腦名稱稱。
在 [ 佇列管理員] 方塊中,選取預設佇列管理員。
在 [ 佇列] 方塊中,輸入 「MQCorrelation」,然後按一下 [ 匯出]。
在 [ 匯出 ] 對話方塊中,按一下 [ 建立佇列],然後按一下 [確定] 或 [ 完成 ],直到您結束所有對話方塊為止。
若要建立通往 MQSeries 的傳送埠
以滑鼠右鍵按一下 [傳送埠],指向 [ 新增],然後按一下 [ 靜態單向傳送埠]。
在 [ 傳送埠屬性 ] 對話方塊的 [ 名稱 ] 方塊中,輸入 「MQOut」。
在 [ 傳輸類型] 方塊中,選取 [MQSeries]。
在 [ 傳送管線 ] 方塊中,選取 [Microsoft.BizTalk.DefaultPipelines.PassThruTransmit]。
按一下 [設定] 。
在 [ MQSeries 傳輸屬性 ] 對話方塊的 [ 佇列定義 ] 方塊中,按一下省略號 (...) 按鈕。
在 [ 佇列定義 ] 對話方塊的 [ 伺服器名稱 ] 方塊中,輸入您的電腦名稱稱。
在 [ 佇列管理員] 方塊中,選取預設佇列管理員。
在 [ 佇列] 方塊中,輸入 「MQCorrelation」,然後按一下 [ 確定]。
按一下 [確定 ],直到您結束所有對話方塊為止。
啟用接收位置和啟動傳送埠
在 BizTalk Server 管理主控台中,按一下 [接收埠]。
在詳細資料窗格中,以滑鼠右鍵按一下 MQIn 接收位置,然後按一下 [ 啟用]。
在詳細資料窗格中,以滑鼠右鍵按一下 MQOut 傳送埠,然後按一下 [ 啟動]。
若要建立應用程式使用的資料夾
在您的 C:\ 磁片磁碟機上,如果資料夾不存在,請建立名為 「temp」 的資料夾。
在 C:\temp 目錄下,建立名為 「Pickup」 和 「Dropit」 的資料夾。
建置和部署此範例
在命令視窗中,瀏覽至下列資料夾:
<Samples Path>\AdaptersUsage\MQSeriesAdapter\MQSCorrelationSetOrchestration
執行檔案 Setup.bat,這會執行下列動作:
為專案建立強式名稱金鑰。
編譯和部署協調流程專案。
使用 FILE 配接器建立傳送埠和接收埠。
繫結並啟動協調流程
在 BizTalk Server 管理主控台中,展開[協調流程]資料夾。
在詳細資料窗格中,以滑鼠右鍵按一下 MQSCorrelationSetOrchestration 協調流程,然後按一下 [ 系結]。
將協調流程連接埠繫結至下列傳送埠和接收位置:
協調流程連接埠 傳送埠/接收位置 FileReceivePort MQSCorrelationSetOrchestration.FileReceivePort MQSeriesResponseReceivePort MQIn MQSeriesRequestSendPort MQOut FileSendPort MQSCorrelationSetOrchestration.FileSendPort 按一下 [ 主機]。
在 [ 主機] 方塊中,選取 [BizTalkServerApplication],然後按一下 [ 確定]。
在 [傳送埠] 中,以滑鼠右鍵按一下 [MQSCorrelationSetOrchestration.FileSendPort],然後選取 [ 啟動]。
在 [接收位置] 中,以滑鼠右鍵按一下 [MQSCorrelationSetOrchestration.FileReceivePort ],然後選取 [ 啟用]。
以滑鼠右鍵按一下協調流程,然後按一下 [ 啟動]。
注意
啟動協調流程也會自動登錄協調流程。
若要測試應用程式
將檔案放入 C:\Temp\Pickup 資料夾中。
檢查 C:\Temp\Dropit 資料夾中的檔案。
注意
如果您停用 MQIn 接收位置,您可以在 WebSphere MQ Explorer 中檢查訊息,並查看已設定訊息和相互關聯識別碼。 若要這樣做,請啟動 WebSphere MQ Explorer ,並檢查放置在 MQCorrelation 佇列中的訊息。 訊息和相互關聯識別碼會顯示在 [訊息屬性] 對話方塊的 [識別碼] 索引標籤上。
注意
在實際生產實例中,您會為每個傳送給 MQSeries 佇列的訊息指派唯一識別碼。 這可以藉由修改協調流程中的 [運算式] 圖形來完成。 請變更下面幾行,將這些屬性設定為唯一的 24 位元組識別碼:
MQSeriesRequestSendMessageModified(MQSeries.MQMD_MsgId) = "111213141516171819202122232425262728293031323334";
MQSeriesRequestSendMessageModified(MQSeries.MQMD_CorrelId) = "111213141516171819202122232425262728293031323334";
如果您想要為這些屬性設定唯一的 24 位元組識別碼,請參閱建立傳送至 MQSeries 之訊息的唯一 24 位元組識別碼一節。
若要為傳送至 MQSeries 的訊息建立唯一的 24 位元組識別碼
在 Visual Studio 中建立新的 C# 類別庫專案。
將下列程式碼貼到該類別的 .cs 檔案中:
using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; namespace MQId {[Serializable] public class GetId { RNGCryptoServiceProvider randomCryptoString = new RNGCryptoServiceProvider(); public string getGuidstr() { byte[] newGuid = GetRandomData(24); return ConvertToHex(newGuid); } private byte[] GetRandomData(int keySize) { byte[] randomData = new byte[keySize]; randomCryptoString.GetBytes(randomData); return randomData; } private string ConvertToHex(byte[] key) { StringBuilder hexString = new StringBuilder(); for (int i = 0; i < key.Length; ++i) { hexString.Append(String.Format("{0:X2}", key[i])); } return hexString.ToString(); } } }
在專案屬性 [應用程式] 頁面上指定MQId 的預設命名空間和GetId的元件名稱。
指定強式名稱金鑰檔,以在專案屬性 [簽署 ] 頁面上簽署元件,然後建置專案。
使用全域組件快取工具 (gacutil.exe) ,將編譯的元件載入 GAC (gacutil /i <名稱編譯的 dll 檔案>) 。
在此範例的 BizTalk 專案中新增 GetId 組件的參考。
將兩個變數新增至此範例中所使用的協調流程:
變數名稱 (識別項) 類型 GetId MQId.GetId strGuid System.String 將下列程式碼貼到此範例的協調流程中所使用的運算式圖形,此識別碼應覆寫現有的程式碼:
GetId = new MQId.GetId(); strGuid = GetId.getGuidstr(); MQSeriesRequestSendMessageModified = MQSeriesRequestSendMessage; MQSeriesRequestSendMessageModified(MQSeries.MQMD_MsgId) = strGuid; MQSeriesRequestSendMessageModified(MQSeries.MQMD_CorrelId) = strGuid;
如果已部署,請停止並移除 BizTalk Server 管理主控台中的協調流程。 然後遵循 建置和部署此範例一節中的步驟, 系結並啟動協調流程 和 測試應用程式。
注意
使用此方法為傳送至 MQSeries 的訊息建立唯一的 24 位元組識別碼,並無法 100% 保證所有傳送的訊息都會有唯一的識別碼,而只能說訊息識別碼重複的可能性會很低。 如果企業需要 100% 保證沒有重複的訊息識別碼,您需要採用不同的自訂程式碼來確保此功能。
在此範例中使用的類別或方法
此範例沒有明確使用任何類別或方法。