2011-08-16 23 views
3

私は、プロデューサとコンシューマの両方が同じマシンに にいるときに非常にうまく動作するMSMQを使用するアプリケーションを持っています。メッセージキューからメッセージを送信した場所はどこですか?

昨日、初めて別のマシンで実行する別のプロデューサを作成しようとしました。 キューが専用キューで、両側が

string strQueueName = ".\Private$\MyQueue"; 

としてそれを参照し、前に私は、リモートマシンからこのキューを参照するには、いくつかの方法を試してみました。私のサーバー名はので、私は

string strQueueName = "groucho\Private$\MyQueue"; 

を試してみました「グルーチョ」、 ですが、これは一貫して「無効なキューのパス名」の例外を投げました。

仲間の開発者は、例外を回避する、私は次のことを試してください示唆していない:

string strQueueName = "FORMATNAME:DIRECT =OS:grouch\\private$\\SDVQueue"; 

私は メッセージが表示されないよう、どちらか、これはもはや例外をスローし、動作するようには思えません待ち行列内にある。

サーバーはWindows Server 2008 R2です。 "Everyone"はReceiveとPeekはできますがSendはできませんが、 "Send"を追加しようとすると、 に「セキュリティ記述子を設定できません」というエラーダイアログが表示されます、エラー:アクセスが拒否されました "。 I doこのボックスには管理者権限があります。

セキュリティにはあらゆる種類のセキュリティがありますが、送信者またはホストマシンのいずれのイベントログにもエラーは表示されません。

セキュリティ上の問題が発生した場合は、どのように問題を確認できますか?

ありがとうございます!ここで

は、完全なテストコードです:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Messaging; 

namespace RemoteQueue 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     string name = "FORMATNAME:DIRECT =OS:groucho\\private$\\SDVQueue";; 
     string input = null; 
     MessageQueue queue = null; 

     try 
     { 
     queue = new MessageQueue(name); 
     string key = "key"; 

     for (int i = 0; i < 200; i++) 
     { 
      Message msgToSend = new Message(); 
      string value = "value_" + i; 

      msgToSend.Body = string.Format("{0},{1}", key, value); 

      Console.WriteLine("Sending message " + i); 
      queue.Send(msgToSend, "otherpart"); 
     } 

     } 
     catch (MessageQueueException me) 
     { 
     Console.WriteLine("ERROR: caught message queue exception: " + me.Message); 
     } 

     Console.WriteLine("Type any key to exit..."); 
     input = Console.ReadLine(); 

    } 
    } 
} 
+0

デッドレターキューにメッセージがありますか? –

+0

私はちょうどチェックし、デッド・レター・キューには何もありません。 –

答えて

4

使用すると、1つのサーバーからメッセージを送信してから送信キューに見れば、あなたはを送信することを意図して作成された一時キューが表示されますメッセージ。キューにメッセージが表示されるはずです。

受信サーバーに移動します。

キューのアクセス権を設定するには、その所有権を取得する必要があります。 キューのプロパティ - >セキュリティタブ - >詳細 - >オーナータブ - >オーナー変更。リストにあなたのWindowsプリンシパルが表示されます。

これにより、送信許可を設定できます。これが完了したら、送信側サーバーの送信キューをチェックすると、メッセージが送信されます。

これが役に立ちます。

1

あなたの例に以下を追加してください。サーバーによって処理されない場合は、デッドレターキューに表示されます。

...

queue = new MessageQueue(name); 

queue.DefaultPropertiesToSend = new DefaultPropertiesToSend(); 

queue.DefaultPropertiesToSend.UseDeadLetterQueue = true; 

....

0

は、あなたのMSMQサーバー上のセキュリティ問題がある可能性があります。

キューに 'everyone everyone control'を設定してみてください。

関連する問題