2011-11-22 25 views
10

從C#中使用MSMQManagement的最佳方式是什麼?我需要能夠在遠程機器斷開連接時查看並清除本地傳出隊列。C#中的MSMQ COM API

顯然有些用戶可以通過COM API做到這一點,但是在COM References選項卡中,我沒有其他網站/博客/帖子提及的「Microsoft Message Queue 3.0 Object Library」(也沒有任何類似的東西) 。我在機器上搜索了Interop.MSMQ.dll並找不到它。

我們使用VS 2008並在Windows 7 64位上運行。

我錯過了什麼?是否有其他機制通過「正常」託管類來實現這一點?

感謝

+0

如果您的Windows 7計算機中未安裝MSMQ,請轉到控制面板 - >程序和功能並添加功能MS MQ ... –

+0

MSMQ已安裝,與DCOM代理一樣。通過System.Messaging類,我可以毫無問題地使用MSMQ的「正常」功能。當隊列另一端的機器與網絡斷開連接時,我不能做的是清除或查看本地傳出隊列中的消息。這些操作中的任何一個都會在機器未連接時引發MessageQueueException。 – Dan1701

+0

在使用COM API訪問MSMQManagement類的其他開發人員的Web上,有許多示例都是通過託管代碼訪問MSMQManagement類的,該代碼不包含在System.Messaging中。這些示例演示通過COM引用選項卡添加對「Microsoft Message Queue 3.0對象庫」的引用。我沒有這個選擇。我正在尋找一種方法來獲取此DLL,或至少發現它不能在Windows 7/Server 2008上工作。 – Dan1701

回答

3

您可以使用本機使用它從.NET:System.Messaging.MessageQueue

檢查這些文章:

Accessing Message Queues

Reliable Messaging with MSMQ and .NET

+1

System.Messaging與COM API庫不同。 System.Messaging不允許訪問本地傳出隊列(除非它與另一端位於同一臺計算機上)。 MSMQManagement類提供了一些機制來執行此操作,但我無法弄清楚如何通過託管代碼訪問它。 – Dan1701

14

項目+添加引用,瀏覽選項卡。導航到c:\ windows \ system32(或64位操作系統上的syswow64)並選擇mqoa30.tlb。這會創建您正在查找的Interop.MSMQ.dll互操作程序集。注意MSMQ是一個可選的Windows組件,如果該文件不在您的計算機上,則需要先安裝它。

+0

這似乎不起作用(至少不是在Visual Studio 2010中)。我得到這個錯誤:「無法加載文件或程序集」mqoa30.tlb「或它的一個依賴項,該模塊需要包含程序集清單,該文件可能不是託管程序集。 – Vaccano

+1

我已經確認這適用於Visual Studio 2008而不適用於Visual Studio 2010.我在這裏問了一個關於它的問題:http://stackoverflow.com/questions/9593538/how-to-add-a-reference-to -the-iterop-msmq-stuff – Vaccano

+1

當我在VS2010中嘗試時,它工作得很好。您沒有使用「瀏覽」選項卡,我無法識別屏幕快照。 –