system.messaging队列冻结而message.receive

时间:2012-06-12 16:04:00

标签: vb.net message-queue system.messaging

这是我第一次使用此消息传递库并使用一些示例代码来实现它。我第一次运行它它完美地工作但我突然停止了代码,因为我的解析方法似乎是错误的。因此,当我重新启动它时,代码会冻结在以下行:

message = q.Receive()

消息队列是否可能已损坏或有什么问题?我检查了服务器管理器,看起来队列仍然存在,并且消息数量= 1。 这是我的其余代码:

 If MessageQueue.Exists(".\private$\TwitterQueue") Then
        q = New MessageQueue(".\private$\TwitterQueue")
    Else
        'GS - If there is no queue then we're done here
        Console.WriteLine("Queue has not been created!")
       Return
 End If
 Try
    While True
            'GS - Try and pull back the next message
            Dim message As Message
            Try
                message = q.Receive()
                message.Formatter = New XmlMessageFormatter(New [String]() {"System.String"})
                 ProcessMessage(message)

             Catch

             end try
End While

编辑:

如何创建队列:

 Dim q As MessageQueue = If((MessageQueue.Exists(".\private$\TwitterQueue")), New MessageQueue(".\private$\TwitterQueue"), MessageQueue.Create(".\private$\TwitterQueue"))

以及如何使用它:

Dim msg As New Message(responseData)
q.Send(msg)

并检查它是否是交易性的;

If q.Transactional = True Then
                    Thread.Sleep(2000)
                End If

并且不是。

1 个答案:

答案 0 :(得分:0)

如果您尝试从后面的代码创建队列,您可以尝试设置权限

If MessageQueue.Exists(".\private$\TwitterQueue") Then
        q = New MessageQueue(".\private$\TwitterQueue")
        q.SetPermissions("Everyone", MessageQueueAccessRights.FullControl, AccessControlEntryType.Allow)
    Else
        'GS - If there is no queue then we're done here
        Console.WriteLine("Queue has not been created!")
       Return
 End If

如果仍然无法接收队列,我建议手动创建队列。