4

MSMQ 経由でメッセージを送信する関数を作成しましたが、実行中に例外が発生しました。以下は私の機能です。

public void SendMessageToQueue(ChessQueue chessQueue)
{
    MessageQueue queue = null;
    Message m = null;
    if (!MessageQueue.Exists(".\\Private$\\" + chessQueue.QueueName))
    {
        queue = new MessageQueue(".\\Private$\\chessqueue");
        chessQueue.Messages = new List<MessageObject>();
        chessQueue.Messages.Add(chessQueue.Message);
        queue.Formatter = new BinaryMessageFormatter();
        m = new Message();
        m.Body = chessQueue;
    }
    else
    {
        queue = new MessageQueue(".\\Private$\\" + chessQueue.QueueName);
        queue.Formatter = new BinaryMessageFormatter();
        m = queue.Receive();
        ChessQueue ExistingChessQueue = m.Body as ChessQueue;
        ExistingChessQueue.Messages.Add(chessQueue.Message);
        m.Body = ExistingChessQueue;
    }            
    queue.Send(m);
    // Getting Exception at this Line
}

例外:- キューが存在しないか、操作を実行するための十分な権限がありません。

また、[コンピュータの管理] の [メッセージング キュー] の [セキュリティ] タブを開くことができません。添付のスクリーンショットを参照してください。 ここに画像の説明を入力

手動でプライベートの下にメッセージキューを作成しようとしましたが、システムで許可されました。下記参照 ここに画像の説明を入力

以下は mmc スパンです。 ここに画像の説明を入力

4

1 に答える 1

5
if (!MessageQueue.Exists(".\\Private$\\" + chessQueue.QueueName))
{
    queue = new MessageQueue(".\\Private$\\chessqueue");
    // etc..

このコードには 2 つのバグがあります。最初の問題は、chessQueue.QueueName を使用する代わりに、文字列にキュー名をハードコーディングすることです。もちろん、ミスマッチは致命的です。2 つ目の問題は、これが最も重要な問題ですが、実際にはキューが作成されないことです。適切なコードは次のようになります。

string name = ".\\Private$\\" + chessQueue.QueueName;
if (!MessageQueue.Exists(name))
{
    queue = MessageQueue.Create(name);
    // etc...

このコードを実行した後、1 つの queue.Send() 呼び出しで次のようになりました。

ここに画像の説明を入力

于 2015-03-26T12:30:22.383 に答える