次の方法で共有


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 キューを作成するには

  1. [スタート] ボタンをクリックし、[プログラム] をポイントし、[WEBSphere MQ] をポイントして、[WebSphere MQ エクスプローラー] をクリックします。

  2. [キュー マネージャー] をダブルクリックし、既定のキュー マネージャーをダブルクリックします。 通常、既定のキュー・マネージャーには QM_< という名前が付けられます。ここでmachine_name>machine_name はコンピューターの名前です。

  3. [ キュー] を右クリックし、[ 新規] をポイントして、[ ローカル キュー] をクリックします。

  4. [ ローカル キューの作成 ] ダイアログ ボックスの [ キュー名] に「MQCorrelation」と入力し、[OK] をクリック します

受信場所と MQSeries キューを作成するには

  1. BizTalk Server管理コンソールを開きます。

  2. [BizTalk Server管理] を展開し、[BizTalk グループ] を展開し、[アプリケーション] を展開して、必要なアプリケーションを展開します。

  3. [ 受信ポート] を右クリックし、[ 新規] をポイントして、[ 一方向の受信ポート] をクリックします。

  4. [ 一方向の受信ポートのプロパティ ] ダイアログ ボックスの [名前 ] ボックスに「MQIn」と入力し、[OK] をクリック します

  5. 左側のウィンドウで、[ 受信場所 ] タブをクリックし、[ 新規] をクリックします。

  6. [ 受信場所のプロパティ ] ダイアログ ボックスの [名前 ] ボックスに「MQIn」と入力します。

  7. [ トランスポートの種類 ] ボックスで、[ MQSeries] を選択します。

  8. [ 受信ハンドラー ] ボックスで、 BizTalkServerApplication を選択します。

  9. [ 受信パイプライン ] ボックスで、[ Microsoft.BizTalk.DefaultPipelines.PassThruReceive] を選択します。

  10. [構成] をクリックします。

  11. [ MQSeries トランスポートのプロパティ ] ダイアログ ボックスの [ ポーリング間隔 ] ボックスに「10」と入力します。

  12. [ キュー定義 ] ボックスで、省略記号 (...) ボタンをクリックします。

  13. [ キュー定義 ] ダイアログ ボックスの [ サーバー名 ] ボックスに、コンピューター名を入力します。

  14. [ キュー マネージャー ] ボックスで、既定のキュー マネージャーを選択します。

  15. [ キュー ] ボックスに「MQCorrelation」と入力し、[ エクスポート] をクリックします。

  16. [ エクスポート ] ダイアログ ボックスで、[ キューの作成] をクリックし、すべてのダイアログ ボックスを終了するまで[OK]または [完了 ] をクリックします。

MQSeries に対する送信ポートを作成するには

  1. [ 送信ポート] を右クリックし、[ 新規] をポイントして、[ 静的一方向送信ポート] をクリックします。

  2. [ 送信ポートのプロパティ ] ダイアログ ボックスの [名前 ] ボックスに「MQOut」と入力します。

  3. [ トランスポートの種類 ] ボックスで、[ MQSeries] を選択します。

  4. [ パイプラインの送信 ] ボックスで、[ Microsoft.BizTalk.DefaultPipelines.PassThruTransmit] を選択します。

  5. [構成] をクリックします。

  6. [ MQSeries トランスポートのプロパティ ] ダイアログ ボックスの [ キュー定義 ] ボックスで、省略記号 (...) ボタンをクリックします。

  7. [ キュー定義 ] ダイアログ ボックスの [ サーバー名 ] ボックスに、コンピューター名を入力します。

  8. [ キュー マネージャー ] ボックスで、既定のキュー マネージャーを選択します。

  9. [ キュー ] ボックスに「MQCorrelation」と入力し、[OK] をクリック します

  10. すべてのダイアログ ボックスを終了するまで[ OK]をクリックします

受信場所を有効にして送信ポートを開始するには

  1. BizTalk Server管理コンソールで、[受信ポート] をクリックします。

  2. 詳細ペインで、 MQIn 受信場所を右クリックし、「 使用可能」をクリックします。

  3. 詳細ペインで、 MQOut 送信ポートを右クリックし、「開始」をクリックします

アプリケーションが使用するフォルダーを作成するには

  1. C:\ ドライブに "temp" という名前のフォルダーがまだ存在しない場合は作成します。

  2. C:\temp ディレクトリの下に、"Pickup" と "Dropit" という名前のフォルダーを作成します。

サンプルのビルドと展開

  1. コマンド ウィンドウで、次のフォルダーに移動します。

    <Samples Path>\AdaptersUsage\MQSeriesAdapter\MQSCorrelationSetOrchestration

  2. ファイル Setup.bat を実行すると、次のアクションが実行されます。

    1. プロジェクトの厳密な名前のキー ファイルを作成します。

    2. オーケストレーション プロジェクトをコンパイルして展開します。

    3. ファイル アダプター用の送信ポートと受信ポートを作成します。

オーケストレーションのバインドと開始

  1. BizTalk Server管理コンソールで、[オーケストレーション] フォルダーを展開します。

  2. 詳細ウィンドウで、 MQSCorrelationSetOrchestration オーケストレーションを右クリックし、[ バインド] をクリックします。

  3. オーケストレーション ポートを、以下の送信ポートおよび受信場所にバインドします。

    オーケストレーション ポート メッセージ ポート/受信場所
    FileReceivePort MQSCorrelationSetOrchestration.FileReceivePort
    MQSeriesResponseReceivePort MQIn
    MQSeriesRequestSendPort MQOut
    FileSendPort MQSCorrelationSetOrchestration.FileSendPort
  4. [ ホスト] をクリックします。

  5. [ ホスト ] ボックスで、[ BizTalkServerApplication] を選択し、[OK] をクリック します

  6. [ 送信ポート] で[ MQSCorrelationSetOrchestration.FileSendPort] を右クリックし、[開始] を選択 します

  7. [ 受信場所] で[ MQSCorrelationSetOrchestration.FileReceivePort ] を右クリックし、[ 有効にする] を選択します。

  8. オーケストレーションを右クリックし、[ 開始] をクリックします。

    Note

    オーケストレーションを開始すると、オーケストレーションの参加も自動的に実行されます。

アプリケーションをテストするには

  1. ファイルを C:\Temp\Pickup フォルダーに配置します。

  2. 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 を作成するには

  1. Visual Studio で新しい C# クラス ライブラリ プロジェクトを作成します。

  2. クラスの .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();  
            }  
        }  
    }  
    
  3. プロジェクトのプロパティ [アプリケーション] ページで、MQId既定の名前空間GetId のアセンブリ名を指定します。

  4. プロジェクトのプロパティ [ 署名 ] ページでアセンブリに署名する厳密な名前キー ファイルを指定し、プロジェクトをビルドします。

  5. グローバル アセンブリ キャッシュ ツール (gacutil.exe) を使用して、コンパイル済みアセンブリを GAC (コンパイル済み dll ファイル>の gacutil /i < 名) に読み込みます。

  6. このサンプルの BizTalk プロジェクトに GetId アセンブリへの参照を追加します。

  7. このサンプルで使用するオーケストレーションに 2 つの変数を追加します。

    変数名 (ID) Type
    GetId MQId.GetId
    strGuid System.String
  8. このサンプルのオーケストレーションに使用する式図形に次のコードを貼り付けます。このコードで既存のコードを上書きします。

    GetId = new MQId.GetId();  
    strGuid = GetId.getGuidstr();  
    MQSeriesRequestSendMessageModified = MQSeriesRequestSendMessage;  
    MQSeriesRequestSendMessageModified(MQSeries.MQMD_MsgId) = strGuid;  
    MQSeriesRequestSendMessageModified(MQSeries.MQMD_CorrelId) = strGuid;  
    
  9. 既に展開されている場合は、BizTalk Server管理コンソールでオーケストレーションを停止して削除します。 次に、「 このサンプルのビルドと展開」セクションの手順に従って、 オーケストレーションをバインドして起動しアプリケーションをテストします

    Note

    この方法で MQSeries に送信されるメッセージに一意の 24 バイト ID を作成しても、送信されるすべてのメッセージに対して一意の ID が 100% 保証されるわけではありません。ただし、メッセージ ID が重複する可能性は非常に低くなります。 ビジネス要件により、重複するメッセージ ID がないことを 100% 保証する必要がある場合、別のカスタム コードを使用してこの機能を確保する必要があります。

このサンプルで使用されるクラスまたはメソッド

このサンプルでは、クラスやメソッドを明示的に使用しません。

参照

要求 - 応答を使用したメッセージの関連付け
MQSeries アダプタ サンプル