Как пользоваться услугой 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)
Сообщение об ошибке = "Длина не может быть меньше нуля. Имя параметра: длина"
Следующие вещи установлены на моем т / ц
- Сервер очереди сообщений Microsoft (MSMQ)
- Процесс активации окна
Также когда я попробовал как
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()