0

我想使用 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) 上给我错误

错误信息="长度不能小于零。参数名称:长度"

以下东西安装在我的 m/c 上

  1. Microsoft 消息队列 (MSMQ) 服务器
  2. 窗口激活过程

当我尝试作为

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

但它给出“路径语法无效”

我无法得到任何东西。我所拥有的只是一个 msmq URL “net.msmq://myServerName/private/MyQueueName”

请让我知道如何使用这样的网址并将我的消息发送到“MyQueueName”

任何帮助表示赞赏

先谢谢了。

4

2 回答 2

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()
于 2016-07-09T13:35:01.953 回答
0

以下是如何使用服务的示例。

它有 Wcf 服务、物理 MSMQ 和客户端项目。所以你必须有一个 WCF 服务来接收消息和 msmq 来存储消息和一个客户端来发送消息。

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

于 2016-09-05T16:38:44.067 回答