我有這個下面的代碼(逐字),我希望產生一個錯誤:檢測MSMQ錯誤
using System.Messaging;
namespace MsmqTest
{
class Program
{
static void Main()
{
string invalidQueue = @"FormatName:DIRECT=OS:sometrahsname\private$\anothertrahsname";
Enqueue("test",invalidQueue);
}
private static void Enqueue(object o, string queueName)
{
using (MessageQueue msmq = new MessageQueue(queueName))
using (MessageQueueTransaction transaction = new MessageQueueTransaction())
{
msmq.DefaultPropertiesToSend.Recoverable = true;
transaction.Begin();
msmq.Send(new Message(o), transaction);
transaction.Commit();
}
}
}
}
在這裏,我們是不存在的服務器上發送消息到隊列。我期望收到一個跡象表明出現了問題。我沒有得到任何。如何在這種情況下檢查錯誤?
注意:爲了運行上面的代碼,您需要在您的機器上安裝MSMQ。
大概[MSDN博客:是否存在MSMQ隊列檢查是艱苦的工作(http://blogs.msdn.com/b/johnbreakwell/archive/2008/07/31/checking-if-msmq -queue-exist-is-hard-work-so-should-you-bother.aspx)應該能夠啓發你的任務 –
注意最後一個語句'msm.Close()'不是必需的; '使用'將完成這項工作。也不需要「交易」,因爲您只需做一件事(添加到消息隊列中)。 –
@RichardSchneider你是對的,至少對於System.Messaging的4.0版本。我在反射器中打開它並確保'Dispose'調用'Close'。一般來說,這並不能保證,所以如果你不想在反射器中檢查你碰巧使用的每個類,這是一個很好的預防措施。我將編輯該問題以刪除它。 –