2012-03-08 7 views
0

私のMSMQでメッセージの数を取得しようとしています。私は、インターネット上でこのコードを発見した(何度も):MSMQ Comがキューを見つけることができません。

// setup the queue management COM stuff 
MSMQManagement _queueManager = new MSMQManagement(); 

object machine = "MyLaptopComputer"; 
object path = @"DIRECT=OS:MyLaptopComputer\PRIVATE$\MyQueue"; 

_queueManager.Init(ref machine, ref path); 

Console.WriteLine(_queueManager.MessageCount); 

Marshal.ReleaseComObject(_queueManager); 

それがこのエラーで失敗した私は_queueManager.Initに着くたびに:私がチェックしている

The queue path name specified is invalid.

(ダブルチェックする)私のキュー名それが間違っているかどうかを確認してください。私は別のキュー、別のマシン、ローカルで実行しているリモート実行してみました...何も動作しません。

私も上記のコードのバリエーションを試しました。例えば私が試してみました:私はそれらにアクセスするNServiceBusを使用する場合

_queueManager.Init("MyLaptopComputer", @"DIRECT=OS:MyLaptopComputer\PRIVATE$\MyQueue"); 

キューがNServiceBusと機能をうまく使用されています。

どのように私はこれを動作させることができますか?

+1

"localhost"または "。"を使用してみましたか?あなたの明示的なコンピュータ名の代わりにあなたのパスに? –

+0

@SeanH私は試してみました "。"しかし、私はあきらめる前にちょっとだけ試してみたはずです。私の仕事の変化を見るために私の答えを見てください。 – Vaccano

+0

なぜ、COMクラス内に完全に良いApiがある場合、COMクラスを使用していますか?あなたはC#を使用しているので、ネットフレームワーク? –

答えて

1

私が問題となっているのは、間違っていると思われるエラーです。 MSMQManagement.Initは3つのパラメータをとります。それらはすべてオプションです。なぜなら、VBのような他の言語では、たった2つのパラメータで呼び出されることがあります。

CodeProject projectは、C#で何をやっているやって方法を示してあります:

private int GetMessageCount(string queueName) 
{ 
    int count = 0; 
    try 
    { 

     MSMQ.MSMQManagement mgmt = new MSMQ.MSMQManagement(); 
     MSMQ.MSMQOutgoingQueueManagement outgoing; 
     String s = "YOURPCNAME"; 
     Object ss = (Object)s; 
     String pathName = queueName; 
     Object pn = (Object)pathName; 
     String format = null; 
     Object f = (Object)format; 

     mgmt.Init(ref ss , ref f, ref pn); 

     outgoing = (MSMQ.MSMQOutgoingQueueManagement)mgmt; 
     count = outgoing.MessageCount; 

    } 
    catch (Exception ee) 
    { 
     MessageBox.Show(ee.ToString()); 
    } 
    return count; 
} 

それが良い出発点を提供するかもしれません。

0

それは問題の組み合わせであった。私がPathNameではなくFormatNameを使用するのに必要な最大のものです。キューが空の場合

_queueManager.Init("MyComputer", null, @"DIRECT=OS:MyComputer\PRIVATE$\MyQueue"); 

また、それは例外がスローされます...

は、COMインターフェイスを愛するようになりました。 :)

関連する問題