SendMSMQMessage
SendMSMQMessage サンプルは、.NET ベースのアプリケーションから MSMQ ポートにメッセージを送信する方法を示します。 また、MSMQ 受信場所を使用するように Microsoft BizTalk Serverを構成する方法についても説明します。
メッセージ キューの多くの操作が非同期であることに注意が必要です。 つまり、要求された操作が完全に完了する前に、多くの MSMQ API 呼び出し ( System.Messaging.MessageQueue.Send など) が呼び出し元に戻ります。 MSMQ には、操作完了後にアプリケーションにフィードバックを配信するメカニズムが用意されています。 このメカニズムには、"管理 キュー" の使用が含まれます。MSMQ は、管理 キュー内のメッセージの形式でフィードバックを返します。 MSMQ がフィードバックを返す管理キューは、元の MSMQ API 呼び出しが行われたときに指定されます。 そのため、たとえば、System.Messaging.MessageQueue.Send API を使用してメッセージを送信する場合、アプリケーションは System.Messaging.MessageQueue.Send の呼び出しで渡されたメッセージのPROPID_M_ADMIN_QUEUE メッセージ プロパティを使用して、管理 キューの名前を指定できます。 アプリケーションは System.Messaging.MessageQueue.Send 呼び出しで正常なリターン コードを取得できますが、その後メッセージ送信操作が失敗した場合、MSMQ は指定した管理 キューにその旨のメッセージを書き込みます。 アプリケーションで 管理 キューが指定されていない場合、送信エラーが発生するとメッセージが失われ、診断キャプチャされません。実際には、メッセージは証拠なしで消えます。 MSMQ には、トランザクション キューへの非トランザクション送信など、このようなエラーが発生する原因となるエラーが多数あります。
このサンプルのコンテキストでは、メッセージが送信されるキューに対して指定されたトランザクション サポートと一致する System.Messaging.MessageQueue.Send の呼び出しで、コードでトランザクションの種類を指定することが重要です。 この処理が行われない場合や、(このサンプルのように) 管理キューが指定されていない場合、MSMQ は何の通知もなく送信メッセージを破棄します (つまり、アプリケーションにエラー コードが返されたり、イベント ログに診断が書き込まれたりすることはありません)。
<Samples Path>\AdaptersUsage\SendMSMQMessage\
次の表は、このサンプルのファイルとその目的を示しています。
ファイル | 説明 |
---|---|
App.ico、AssemblyInfo.cs、SendMSMQMessage.csproj、SendMSMQMessage.sln | このサンプルの単純なグラフィカル アプリケーション用のプロジェクト、ソリューション、および関連ファイルを提供します。 |
Form1.cs、Form1.resx | このサンプルの単純なグラフィカル アプリケーション用の Microsoft Visual C#.NET ソース ファイルとフォーム ファイルを提供します。 |
このサンプルに含まれている単純なグラフィカル アプリケーションのコードは、 から BizTalk Server 内の MSMQ 受信場所にメッセージを送信する方法の例として使用できます。Microsoft Office などの NET 対応アプリケーション、ASP.NET ページなど。
Visual Studio を使用して、ソリューション ファイル SendMSMQMessage.sln を開きます。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
BizTalk Serverを構成し、サンプルを実行するための MSMQ キューを作成するには、次の手順に従います。
[ スタート] をクリックし、[ コンピューター] を右クリックし、[ 管理] をクリックします。
[機能] ノードを展開します。 メッセージ キューがインストールされていない場合は、[機能] を右クリックし、[機能の追加] を選択します。 [メッセージ キュー] をオンにし、[次へ] をクリックし、[インストール] をクリックして、そのシステムに MSMQ をインストールします。
[メッセージ キュー] ノードを展開します。
[ プライベート キュー ] ノードを右クリックし、[ 新規] をクリックし、[ プライベート キュー] をクリックします。
[ キュー名] に「」と入力します
test
。 [トランザクション チェック] ボックスが選択されていることを確認します。[OK] をクリックします。
[ スタート] をクリックし、[ コンピューター] を右クリックし、[ 管理] をクリックします。
[ サービスとアプリケーション] を展開し、[ メッセージ キュー ] ノードを展開します。
注意
メッセージ キューがコンピューターにインストールされていない場合は、[プログラム>プログラムと機能のコントロール パネル>] に移動し、[Windows の機能のオンとオフを切り替える] を選択します。 [Microsoft Message Queue (MSMQ) Server]\(Microsoft Message Queue (MSMQ)サーバー\) のすべての機能を確認し、[OK] をクリックします。
[ プライベート キュー ] ノードを右クリックし、[ 新規] をクリックし、[ プライベート キュー] をクリックします。
[ キュー名] に「 test」と入力します。 [トランザクション チェック] ボックスが選択されていることを確認します。
[OK] をクリックします。
メッセージを受信するフォルダーを選択します。 次の手順では、C:\Demo\Report を選択していることを前提としていますが、別のフォルダーに必要に応じて手順を調整できます。
BizTalk Server管理コンソールを開きます。
MSMQSample という名前の新しいアプリケーションを作成します。
[ 受信ポート] を右クリックし、[ 新規] をクリックし、[ 一方向の受信ポート] をクリックします。
[ 受信ポートのプロパティ ] ダイアログ ボックスの [名前 ] ボックスに 「MyReceivePort」と入力し、[OK] をクリック します。
[ 受信場所] を右クリックし、[ 新規] をクリックし、[ 一方向の受信場所] をクリックします。 [ 受信ポートの選択 ] ダイアログ ボックスで、先ほど作成した受信ポートを選択し、[OK] をクリック します。
[ 受信場所のプロパティ ] ダイアログ ボックスの [名前 ] ボックスに、受信ポートの名前 ( MSMQReceiveLocation など) を入力します。
[ 受信場所のプロパティ ] ダイアログ ボックスで、トランスポートの種類として [ MSMQ ] を選択します。
[ 構成] を クリックして、[ MSMQ トランスポートのプロパティ ] ダイアログ ボックスを開きます。 [キュー] を に
localhost\private$\test
設定し、[トランザクション] を にTrue
設定し、[OK] をクリックします。アプリケーションを展開し、[ 送信ポート] を選択し、[ 新規] を選択し、[ 静的な一方向の送信ポート] を選択します。
[ 送信ポートのプロパティ ] ダイアログ ボックスの [名前 ] ボックスに、送信ポートの名前 ( MySendPort など) を入力します。
[トランスポートの種類] プロパティを FILE に設定します。
[ 構成] を クリックして、[ ファイル トランスポートのプロパティ ] ダイアログ ボックスを開きます。
[ ファイル トランスポートのプロパティ ] ダイアログ ボックスで、[ 宛先フォルダー] プロパティを [C:\Demo\Report] に設定し、他のプロパティの既定の設定をそのままにして、[OK] をクリック します。
[ フィルター] を選択し、[ プロパティ ] を [BTS] に設定して新しい行を追加します 。ReceivePortName。 [演算子] 列は に==設定したままにし、[値] 列を [MyReceivePort] に設定し、[OK] をクリックします。
新しい送信ポートを右クリックし、[ 参加] をクリックします。
新しい送信ポートをもう一度右クリックし、[ 開始] をクリックします。
新しい受信場所を右クリックし、[ 有効にする] をクリックします。
BizTalk Serverは、このサンプルを操作する準備ができました。
次の手順を使用して、SendMSMQMessage サンプルを実行します。
コマンド ウィンドウで、次のフォルダーに移動します。
<サンプル パス>\AdaptersUsage\SendMSMQMessage\bin\Debug
SendMSMQMessage.exe ファイルを実行すると、このサンプルのユーザー インターフェイスを提供するグラフィカル アプリケーションが起動します。
グラフィカル アプリケーションの [BizTalk コンピューター名 ] ボックスに、ローカル コンピューターの名前を入力します。
[ラップされた送信] オプションを試します。
必要に応じて、[ メッセージ本文 ] ボックスのテキストを変更します。
[ ラップされた送信] をクリックします。
操作が成功すると、次の情報が表示されます。
ボタンのすぐ上のボックスに、 "成功 " という単語が赤いフォントで表示されます。
送信先フォルダー C:\Demo\Reports にファイルが表示されます。 このファイルには、.NET メッセージ キュー ライブラリによって単純な XML タグでラップされた [メッセージ 本文 ] ボックスのテキストが含まれています。
操作に失敗すると、ボタンのすぐ上のボックスにエラー メッセージが表示されます。
[ Send Exact]\(正確に送信\) オプションを試します。
必要に応じて、[ メッセージ本文 ] ボックスのテキストを変更します。
[ 正確に送信] をクリックします。
操作が成功すると、次の情報が表示されます。
ボタンのすぐ上のボックスに、 "成功 " という単語が赤いフォントで表示されます。
送信先フォルダー C:\Demo\Reports にファイルが表示されます。 このファイルには、テキスト ボックスに表示されるのとまったく同じように、[ メッセージ本文 ] ボックスのテキストが含まれています。
操作に失敗すると、ボタンのすぐ上のボックスにエラー メッセージが表示されます。