Как пользоваться услугой 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)

Сообщение об ошибке = "Длина не может быть меньше нуля. Имя параметра: длина"

Следующие вещи установлены на моем т / ц

  1. Сервер очереди сообщений Microsoft (MSMQ)
  2. Процесс активации окна

Также когда я попробовал как

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

Но это дает "Синтаксис пути неверен"

Я не могу ничего получить на это. То, что у меня есть, это просто msmq URL "net.msmq://myServerName/private/MyQueueName"

Пожалуйста, дайте мне знать, как я могу использовать такой URL и отправить мое сообщение на "MyQueueName"

Любая помощь приветствуется

Заранее спасибо.

2 ответа

Вот пример того, как использовать сервис.

Он имеет Wcf Service,Physical MSMQ и клиентский проект. Таким образом, вы должны иметь службу WCF для получения сообщения и msmq для хранения сообщения и клиент для отправки сообщения.

http://www.codeproject.com/Articles/326909/Creating-a-WCF-Service-with-MSMQ-Communication-and

Измените имя своей очереди на это:

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()
Другие вопросы по тегам