【问题标题】:MSMQ complaining about format name while reading messagesMSMQ 在读取消息时抱怨格式名称
【发布时间】:2014-07-03 09:29:51
【问题描述】:

我在运行 xp 的远程机器 (10.3.35.3) 上有一个非事务性专用队列(错误)。我正在尝试从运行 Windows 2008 的机器上读取消息。 我正在使用“FormatName:Direct=tcp:10.3.35.3\Private$\errors”来访问队列。

我可以连接到它。 我可以偷看。 我有一个用于 ReceiveCompleted 事件的 eventHandler,一旦从队列接收到消息,它就会被触发,但是当我尝试将“源”对象转换为 messageQueue 时。

Friend Sub MyReceiveCompleted(ByVal [source] As [Object], ByVal asyncResult As   ReceiveCompletedEventArgs)
Dim objMessageQueue As MessageQueue
Try

    objMessageQueue = New MessageQueue
    objMessageQueue = CType([source], MessageQueue) 

此时,当我尝试将“源”对象转换为 MessageQueue 对象时,出现异常“指定的格式名称不支持请求的操作。例如,无法删除直接队列格式名称。”。

异常的完整堆栈跟踪

at System.Messaging.MessageQueue.GenerateQueueProperties()
   at System.Messaging.MessageQueue.get_QueuePath()
   at System.Messaging.MessageQueue.get_QueueName()
   at MyReceiveCompleted(Object source, ReceiveCompletedEventArgs asyncResult)

我尝试了不同的格式名称,但没有运气。谁能解释一下这里有什么问题?我还需要使用其他格式名称吗?我们可以事先知道队列会喜欢什么格式名吗?

注意:在here 有人说要改用 id,当我在队列的属性中查找 id 时,我在“Type ID:”字段中得到全 0。

【问题讨论】:

    标签: vb.net msmq


    【解决方案1】:

    好吧,我放弃了,它仍然无法正常工作,因为它是一个非常混乱的旧代码的一部分。我创建了自己的小应用程序(使用相同的代码,相同的 .net 框架),它可以连接到远程队列和读/写/窥视。所以我相信这是一个非常古老的代码库维护噩梦的例子。

    在我的研究过程中,我发现了一些有用的链接,这可能会对将来登陆这里的人有所帮助。 John Breakwell 有以下关于远程队列的贡献

    There is a new security in MSMQ4.0

    A registry key in MSMQ3.0

    some ports info regarding msmq

    some more info about remote msmq 4.0 processing

    要查看您的 msmq 是否安装在工作组模式或其他模式下,请转到 HKLM->Software-> Microsoft->MSMQ->Parameters 检查 REG_DWORD 工作组。 1是工作组模式。 0 为 AD 模式。

    如果您想知道您的 msmq 的版本,请查看 this wiki page 的版本部分

    我差点忘了提到,根据经验,我认为我们应该始终在本地读取和远程写入,而不是相反。

    【讨论】:

      猜你喜欢
      • 2022-07-06
      • 1970-01-01
      • 2018-12-03
      • 2017-08-07
      • 2018-03-13
      • 2012-02-13
      • 2015-02-16
      • 1970-01-01
      • 2013-12-12
      相关资源
      最近更新 更多