我有一個應用程序使用MSMQ,當生產者和消費者都在 同一臺機器上工作得很好。我的消息隊列發送消息去了哪裏?
昨天,我第一次試圖創建另一個生產者,可以在另一臺機器上運行。該 隊列專用隊列,而之前,雙方都引用它作爲
string strQueueName = ".\Private$\MyQueue";
我嘗試了幾種方法來從遠程計算機引用此隊列。我的服務器名稱爲「格勞喬」, 所以我試圖
string strQueueName = "groucho\Private$\MyQueue";
但這始終拋出一個「無效的隊列路徑名」異常。
一位同行開發商建議我嘗試以下方法,避免了異常:
string strQueueName = "FORMATNAME:DIRECT =OS:grouch\\private$\\SDVQueue";
此不再拋出異常,但它似乎沒有工作,要麼,因爲我不 看到消息在隊列中。
服務器是Windows Server 2008 R2。隊列設置(我剛剛注意到),以便 「Everyone」可以接收和查看,但不發送,但是當我嘗試添加「發送」時,出現錯誤對話框 「無法設置安全描述符,錯誤:訪問被拒絕「。 I 做在此框上具有管理員權限。
我從閱讀其他帖子就知道存在各種安全性, 但我在發件人或主機上的事件日誌中都看不到任何錯誤。
如果這是一個安全問題,我怎麼能看到問題是什麼?
謝謝!
下面是完整的測試代碼:
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();
}
}
}
消息是否在死信隊列中? –
我剛剛檢查過,死信隊列中沒有任何內容。 –