リモート マシンで使用可能なキューのリストを取得しようとしています。マシンはワークグループ モードの Win2003R2 で、コードを実行するクライアント マシンは Windows 8 マシンで、どちらも同じワークグループ名を使用しています。次のコードを実行すると例外が発生します。
var messages = MessageQueue.GetPrivateQueuesByMachine("Win2003SRV");
エラーメッセージは次のとおりです。
base {System.Runtime.InteropServices.ExternalException}: {"Access to Message Queuing system is denied."}
Message: "Access to Message Queuing system is denied."
MessageQueueErrorCode: AccessDenied
Windows 2003 のアクセス許可と関係があると確信していますが、あまり見つけられませんでした。このコードは、別の Win Server 2008 (ただし、ワークグループ モード) で正常に動作し、ローカル MSMQ でも動作します。MSDN のページによると、この機能はワークグループ モードでサポートされています。
解決済み:
私の問題は、クライアント マシンに MSMQ がインストールされていないことであることが判明しました。リンクのヘルプは正しい方向を示していたので、クライアント マシンにも MSMQ をインストールするだけで済みました。GetPrivateQueuesByMachine の実装を見ると、ネイティブ呼び出しが DllNotFoundException をスローする可能性があり、その特定のメッセージに変換されるのはその例外であるため、問題のヒントが得られるはずです。