對於其他與此掙扎,拉扯自己的頭髮,這樣我一直,我終於找到了當所有的upvoted的建議失敗的作品。
即使您認爲目標隊列的主機系統的主機名已被正確解析,也不相信它。嘗試用IP地址替換主機名並查看它是否有效。它爲我做。我可以使用遠程服務器上的主機名毫無問題地寫入公共隊列,但嘗試從它讀取時會產生與此問題相關的錯誤。
例如,如果我聲明如下:
private static string QueueName = @"FormatName:DIRECT=TCP:SOMEHOST\MyQueue";
private static System.Messaging.MessageQueue Queue = new System.Messaging.MessageQueue(QueueName);
其中「myQueue中」是在服務器上,某一個公共隊列,下面的代碼將成功消息插入到隊列中,但總是失敗的接收( ):
Queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(String) });
// The Receive() call here is a blocking call. We'll wait if there is no message in the queue, and processing
// is halted until there IS a message in the queue.
//
try
{
Queue.Send("hello world", System.Messaging.MessageQueueTransactionType.Single);
var msg = Queue.Receive(MessageQueueTransactionType.Single);
}
catch (Exception ex)
{
// todo error handling
}
在我如何指定隊列位置的一個簡單的變化是所有的需要,使接收()停止與可怕的失敗「隊列不存在,或者您沒有足夠的權限」錯誤:
private static string QueueName = @"FormatName:DIRECT=TCP:192.168.1.100\MyQueue";
(很明顯我混淆了IP地址和其他敏感信息)。使用IP地址顯然不是一個值得生產的場景,但它確實指出某種類型的名稱解析問題是錯誤的可能原因。我無法解釋爲什麼Send()能夠工作,但Receive()不會在我使用主機名而不是IP時使用,但我可以一致地重現這些結果。在我能夠弄清楚名稱解析發生了什麼之前,我不再浪費一天的時間來閱讀隊列中的消息。
在計算機管理隊列面板中,所有隊列文件夾都是重複的!你的機器有點奇怪。 – 2011-05-02 09:05:29