2011-11-22 24 views
10

C#のMSMQManagementを使用する最良の方法は何ですか?私は、リモートマシンが切断されたときに、ローカル発信キューを覗き見してパージする機能が必要です。C#のMSMQ COM API

明らかに、COM APIを使用してこれを行うことができるユーザーもいますが、[COM References]タブでは、他のWebサイト/ブログ/投稿にも「Microsoft Message Queue 3.0 Object Library」はありません(リモートでも同様) 。私はInterop.MSMQ.dllのためのマシンを検索したが、それも見つけることができません。

私たちはVS 2008を使用しており、Windows 7 64ビットで動作しています。

私には何が欠けていますか? 「通常の」マネージクラスでこれを達成するための他のメカニズムはありますか?

おかげ

+0

Windows 7マシンにMSMQがインストールされていない場合は、コントロールパネル - >プログラムと機能に移動し、Feature MS MQを追加します。 –

+0

DCOMプロキシと同様にMSMQがインストールされます。 System.Messagingクラスを介して問題なくMSMQの "通常の"機能を使用できます。私ができないことは、キューの反対側のマシンがネットワークから切断されたときに、ローカル発信キューのメッセージをパージまたはピークすることです。これらの操作のいずれかが、マシンが接続されていないときにMessageQueueExceptionをスローします。 – Dan1701

+0

他の開発者のWebには、COM APIを使用してSystem.Messagingに含まれていないマネージコードを介してMSMQManagementクラスにアクセスする例が多数あります。これらの例は、COM参照タブを介して「Microsoft Message Queue 3.0 Object Library」への参照を追加する方法を示しています。私はこの選択を持っていません。私はこのDLLを取得する方法を探していますが、少なくともWindows 7/Server 2008では動作しないことがわかります。 – Dan1701

答えて

3

あなたが使用して.NETからネイティブにそれを使用することができます:System.Messaging.MessageQueue

チェックこれらの記事:

Accessing Message Queues

Reliable Messaging with MSMQ and .NET

+1

System.MessagingはCOM APIライブラリとは異なります。 System.Messagingはローカル発信キューへのアクセスを許可しません(他のエンドと同じマシン上にある場合を除く)。 MSMQManagementクラスはこれを行うためのメカニズムを提供しますが、マネージコードを使用してアクセスする方法を理解することはできません。 – Dan1701

14

プロジェクトを+リファレンス、[参照]タブを追加します。 。 c:¥windows¥system32(または64ビットオペレーティングシステムではsyswow64)に移動し、mqoa30.tlbを選択します。これにより、探しているInterop.MSMQ.dll interopアセンブリが作成されます。 MSMQはオプションのWindowsコンポーネントであることに注意してください。ファイルがマシンに存在しない場合は、最初にインストールする必要があります。

+0

これは動作していないようです(少なくともVisual Studio 2010ではない)。私はこのエラーが表示されます: "ファイルまたはアセンブリ 'mqoa30.tlb'またはその依存関係の1つを読み込めませんでした。モジュールにアセンブリマニフェストが含まれていると予想されました。 – Vaccano

+1

これはVisual Studio 2008ではなくVisual Studio 2010で動作することを確認しました。ここで質問しました:http://stackoverflow.com/questions/9593538/how-to-add-a-reference-to -the-iterop-msmq-stuff – Vaccano

+1

VS2010で試してもうまく動作します。 [参照]タブを使用していないため、スクリーンショットが認識されません。 –