MQSCorrelationSetOrchestration (BizTalk Server サンプル)
MQSCorrelationSetOrchestration サンプルは、実行中のオーケストレーションに MQSeries キューをルーティングして戻すために送信されるメッセージを関連付けるための MQSeries 関連付け識別子を使用する方法を示します。 オーケストレーションは、MQMD_CorrelId プロパティと MQMD_MsgID プロパティを使用して、MQSeries 相関 ID とメッセージ ID の値 を 設定します。 MQSeries キュー マネージャーは、MessageID の値をメッセージの CorrelationID プロパティにコピーします。
前提条件
このサンプルでは、BizTalk Serverを実行しているのと同じサーバーに WEBSphere MQSeries がインストールされていることを前提としています。
このサンプルの処理
このサンプルは、IBM WebSphere MQSeries サーバーに送信されるメッセージにメッセージ識別子と関連付け識別子を設定する方法について示します。 これは、実行中のオーケストレーションにルーティングして戻すメッセージを関連付けるための 1 つの方法として挙げられます。 MQSeries キュー マネージャーはメッセージを受信すると、その MessageID の値をメッセージの CorrelationID プロパティにコピーします。 次に、この CorrelationID (MQMD_CorrelId) をオーケストレーションで使用して、MQSeries 上の応答メッセージを、MQSeries にメッセージを送信するために使用されるインスタンスに関連付けます。
このサンプルのデザイン方法とその理由
このサンプルは、オーケストレーションで処理中のドキュメントを MQSeries キューに送信可能であり (多くの場合、追加の処理を行うため)、実行中のオーケストレーションにルーティングして戻されるというシナリオを示します。
このサンプルの場所
<サンプル Path>\AdaptersUsage\MQSeriesAdapter\MQSCorrelationSetOrchestration
次の表は、このサンプルのファイルとその目的を示しています。
[最近使ったファイル] | 説明 |
---|---|
MQSCorrelationSetOrchestration.btproj MQSCorrelationSetOrchestration.sln |
アプリケーションのプロジェクトおよびソリューション ファイル。 |
MQSCorrelationSetOrchestration.odx | アプリケーションのオーケストレーション。 |
MQSCorrelationSetOrchestration.snk | 厳密な名前のキー ファイル。 |
Setup.bat | このサンプルを作成および初期化します。 |
このサンプルの使用方法
全体的なワークフローの 1 つのステップとして MQSeries サーバーにメッセージを送信する必要がある場合は、このサンプルで採用されているロジックを組み込みます。
WebSphere MQ エクスプローラーを使用して MQSeries キューを作成するには
[スタート] ボタンをクリックし、[プログラム] をポイントし、[WEBSphere MQ] をポイントして、[WebSphere MQ エクスプローラー] をクリックします。
[キュー マネージャー] をダブルクリックし、既定のキュー マネージャーをダブルクリックします。 通常、既定のキュー・マネージャーには QM_< という名前が付けられます。ここでmachine_name>machine_name はコンピューターの名前です。
[ キュー] を右クリックし、[ 新規] をポイントして、[ ローカル キュー] をクリックします。
[ ローカル キューの作成 ] ダイアログ ボックスの [ キュー名] に「MQCorrelation」と入力し、[OK] をクリック します。
受信場所と MQSeries キューを作成するには
BizTalk Server管理コンソールを開きます。
[BizTalk Server管理] を展開し、[BizTalk グループ] を展開し、[アプリケーション] を展開して、必要なアプリケーションを展開します。
[ 受信ポート] を右クリックし、[ 新規] をポイントして、[ 一方向の受信ポート] をクリックします。
[ 一方向の受信ポートのプロパティ ] ダイアログ ボックスの [名前 ] ボックスに「MQIn」と入力し、[OK] をクリック します。
左側のウィンドウで、[ 受信場所 ] タブをクリックし、[ 新規] をクリックします。
[ 受信場所のプロパティ ] ダイアログ ボックスの [名前 ] ボックスに「MQIn」と入力します。
[ トランスポートの種類 ] ボックスで、[ MQSeries] を選択します。
[ 受信ハンドラー ] ボックスで、 BizTalkServerApplication を選択します。
[ 受信パイプライン ] ボックスで、[ Microsoft.BizTalk.DefaultPipelines.PassThruReceive] を選択します。
[構成] をクリックします。
[ MQSeries トランスポートのプロパティ ] ダイアログ ボックスの [ ポーリング間隔 ] ボックスに「10」と入力します。
[ キュー定義 ] ボックスで、省略記号 (...) ボタンをクリックします。
[ キュー定義 ] ダイアログ ボックスの [ サーバー名 ] ボックスに、コンピューター名を入力します。
[ キュー マネージャー ] ボックスで、既定のキュー マネージャーを選択します。
[ キュー ] ボックスに「MQCorrelation」と入力し、[ エクスポート] をクリックします。
[ エクスポート ] ダイアログ ボックスで、[ キューの作成] をクリックし、すべてのダイアログ ボックスを終了するまで[OK]または [完了 ] をクリックします。
MQSeries に対する送信ポートを作成するには
[ 送信ポート] を右クリックし、[ 新規] をポイントして、[ 静的一方向送信ポート] をクリックします。
[ 送信ポートのプロパティ ] ダイアログ ボックスの [名前 ] ボックスに「MQOut」と入力します。
[ トランスポートの種類 ] ボックスで、[ MQSeries] を選択します。
[ パイプラインの送信 ] ボックスで、[ Microsoft.BizTalk.DefaultPipelines.PassThruTransmit] を選択します。
[構成] をクリックします。
[ MQSeries トランスポートのプロパティ ] ダイアログ ボックスの [ キュー定義 ] ボックスで、省略記号 (...) ボタンをクリックします。
[ キュー定義 ] ダイアログ ボックスの [ サーバー名 ] ボックスに、コンピューター名を入力します。
[ キュー マネージャー ] ボックスで、既定のキュー マネージャーを選択します。
[ キュー ] ボックスに「MQCorrelation」と入力し、[OK] をクリック します。
すべてのダイアログ ボックスを終了するまで[ OK]をクリックします 。
受信場所を有効にして送信ポートを開始するには
BizTalk Server管理コンソールで、[受信ポート] をクリックします。
詳細ペインで、 MQIn 受信場所を右クリックし、「 使用可能」をクリックします。
詳細ペインで、 MQOut 送信ポートを右クリックし、「開始」をクリックします 。
アプリケーションが使用するフォルダーを作成するには
C:\ ドライブに "temp" という名前のフォルダーがまだ存在しない場合は作成します。
C:\temp ディレクトリの下に、"Pickup" と "Dropit" という名前のフォルダーを作成します。
サンプルのビルドと展開
コマンド ウィンドウで、次のフォルダーに移動します。
<Samples Path>\AdaptersUsage\MQSeriesAdapter\MQSCorrelationSetOrchestration
ファイル Setup.bat を実行すると、次のアクションが実行されます。
プロジェクトの厳密な名前のキー ファイルを作成します。
オーケストレーション プロジェクトをコンパイルして展開します。
ファイル アダプター用の送信ポートと受信ポートを作成します。
オーケストレーションのバインドと開始
BizTalk Server管理コンソールで、[オーケストレーション] フォルダーを展開します。
詳細ウィンドウで、 MQSCorrelationSetOrchestration オーケストレーションを右クリックし、[ バインド] をクリックします。
オーケストレーション ポートを、以下の送信ポートおよび受信場所にバインドします。
オーケストレーション ポート メッセージ ポート/受信場所 FileReceivePort MQSCorrelationSetOrchestration.FileReceivePort MQSeriesResponseReceivePort MQIn MQSeriesRequestSendPort MQOut FileSendPort MQSCorrelationSetOrchestration.FileSendPort [ ホスト] をクリックします。
[ ホスト ] ボックスで、[ BizTalkServerApplication] を選択し、[OK] をクリック します。
[ 送信ポート] で[ MQSCorrelationSetOrchestration.FileSendPort] を右クリックし、[開始] を選択 します。
[ 受信場所] で[ MQSCorrelationSetOrchestration.FileReceivePort ] を右クリックし、[ 有効にする] を選択します。
オーケストレーションを右クリックし、[ 開始] をクリックします。
Note
オーケストレーションを開始すると、オーケストレーションの参加も自動的に実行されます。
アプリケーションをテストするには
ファイルを C:\Temp\Pickup フォルダーに配置します。
C:\Temp\Dropit フォルダー内のファイルを調べます。
Note
MQIn 受信場所を無効にした場合は、WebSphere MQ エクスプローラーでメッセージを調べ、メッセージと相関 ID が設定されていることを確認できます。 これを行うには、WebSphere MQ エクスプローラーを起動し、MQCorrelation キューに入れられたメッセージを調べます。 メッセージと関連付け識別子は、[メッセージのプロパティ] ダイアログ ボックスの [識別子] タブに表示されます。
Note
実稼働環境では、MQSeries キューに送信されるメッセージごとに一意の ID を割り当てる必要があります。 これを行うには、オーケストレーションの式図形を変更します。 次の行を変更してこれらのプロパティを一意の 24 バイト ID に設定します。
MQSeriesRequestSendMessageModified(MQSeries.MQMD_MsgId) = "111213141516171819202122232425262728293031323334";
MQSeriesRequestSendMessageModified(MQSeries.MQMD_CorrelId) = "111213141516171819202122232425262728293031323334";
これらのプロパティーに固有の 24 バイト ID を設定する場合は、「 MQSeries に送信されるメッセージに対して一意の 24 バイト ID を作成するには」セクションを参照してください。
MQSeries に送信されるメッセージに一意の 24 バイト ID を作成するには
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 (コンパイル済み dll ファイル>の gacutil /i < 名) に読み込みます。
このサンプルの BizTalk プロジェクトに GetId アセンブリへの参照を追加します。
このサンプルで使用するオーケストレーションに 2 つの変数を追加します。
変数名 (ID) Type 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管理コンソールでオーケストレーションを停止して削除します。 次に、「 このサンプルのビルドと展開」セクションの手順に従って、 オーケストレーションをバインドして起動し 、 アプリケーションをテストします。
Note
この方法で MQSeries に送信されるメッセージに一意の 24 バイト ID を作成しても、送信されるすべてのメッセージに対して一意の ID が 100% 保証されるわけではありません。ただし、メッセージ ID が重複する可能性は非常に低くなります。 ビジネス要件により、重複するメッセージ ID がないことを 100% 保証する必要がある場合、別のカスタム コードを使用してこの機能を確保する必要があります。
このサンプルで使用されるクラスまたはメソッド
このサンプルでは、クラスやメソッドを明示的に使用しません。