2016-07-08 55 views
0

我想使用msmq服務。但無法發送消息到隊列中。 這是我的代碼。如何使用MSMQ服務

System.Messaging.MessageQueue msmQ = new System.Messaging.MessageQueue("net.msmq://myServerName/private/MyQueueName"); 

msg ="<nodeDetails><node>Node1</node></nodeDetails>";//Dummy value. it is XML structure consist of multiple node 
msmQ.Send(msg); 

它給我的錯誤上msmQ.Send(MSG)

錯誤消息= 「長度不能小於零 參數名:長度」

以下內容是安裝在MY M/C

  1. Microsoft消息隊列(MSMQ)服務器
  2. 窗口激活過程

此外,當我試圖爲

bool msmQExits = MessageQueue.Exists("net.msmq://myServerName/private/MyQueueName"); 

但它給「路徑語法無效」

我不能在上面得到任何東西。 我所擁有的只是一個MSMQ URL「net.msmq:// myServerName /私營/ MyQueueName」

請讓我知道我可以消費這樣的網址和發送我的消息「MyQueueName」

任何幫助欣賞

感謝先進。

+0

爲什麼你想消耗使用system.messaging一個net.msmq終點?你應該使用WCF客戶端。 –

+0

你有任何樣本,如何使用WCF客戶端? 我有一個WCF服務方法,從前端獲取特定操作的調用。其中我必須調用這個msmq服務。 – Sanket

回答

0

更改您的隊列名稱此:

var queueName = @"FormatName:DIRECT=HTTP://URLAddressSpecification/net.msmq://myServerName/private/MyQueueName"; 

如果通過MessageQueue.Exists方法存在一個遠程查詢,你可以不檢查。它會一直拋出異常。

您可以檢查這些鏈接,瞭解更多信息:

而且,這個問題是不是與你看到的長度小於0。如果你的消息更深入並檢查堆棧跟蹤,您會發現隊列名稱的格式無效。它會嘗試在您的隊列名稱內發現FORMAT,但找不到它並且Substring()方法在那裏返回-1

堆棧跟蹤:

at System.String.Substring(Int32 startIndex, Int32 length) 
    at System.Messaging.MessageQueue.ResolveFormatNameFromQueuePath(String queuePath, Boolean throwException) 
    at System.Messaging.MessageQueue.get_FormatName() 
    at System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType) 
    at System.Messaging.MessageQueue.Send(Object obj) 
    at MessagingTest.Program.SendMessage(String str, Int32 x) in c:\Users\ivan.yurchenko\Documents\Visual Studio 2013\Projects\MSMQTestProjects\MessagingTest\MessagingTest\Program.cs:line 21 
    at MessagingTest.Program.<Main>b__1() in c:\Users\ivan.yurchenko\Documents\Visual Studio 2013\Projects\MSMQTestProjects\MessagingTest\MessagingTest\Program.cs:line 38 
    at System.Threading.Tasks.Task.InnerInvoke() 
    at System.Threading.Tasks.Task.Execute()