system.messaging cola congelada mientras message.receive

Esta es la primera vez que utilizo esta biblioteca de mensajería y utilicé un código de ejemplo para implementarla. La primera vez que lo ejecuté funcionó perfectamente, pero detuve abruptamente el código porque mi método de análisis parecía incorrecto. Entonces, cuando lo reinicié, el código se congela en la siguiente línea:

message = q.Receive()

¿Es posible que la cola de mensajes se haya dañado o algo así? Revisé el administrador del servidor y parece que la cola todavía está allí y la cantidad de mensajes = 1 como antes. Aquí está el resto de mi código:

 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

EDIT:

cómo se crea la cola:

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

y como se usa:

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

y solo comprobé si era transaccional;

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

y no lo es

preguntado el 12 de junio de 12 a las 17:06

¿Podría ser que su MessageQueue se haya creado como una MessageQueue transaccional? También podrías intentar usar Cola de mensajes. Recibir (intervalo de tiempo) para establecer un tiempo de espera y debe intentar Cola de mensajes.Peek(). También verifique la configuración de seguridad en su cola. -

Establecí el tiempo de espera en 30 y 60 segundos y se agotó. No estoy seguro de la cola de mensajes transaccionales, pero edité mi publicación para mostrar cómo se creó la cola. -

no importa, acabo de actualizar y vi que se eliminó el mensaje. ¿Esto se hace automáticamente? ¿Es posible restaurarlo de alguna manera? -

Si si Receive el mensaje se elimina de la cola y no se puede restaurar. -

1 Respuestas

Si intenta Crear cola desde detrás del código, puede intentar establecer los permisos

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

Si aún no puede recibir la Cola, recomiendo crear la Cola manualmente.

respondido 22 mar '15, 23:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.