2008-12-17 17 views
6

Estoy intentando conectar con un mando a distancia cola MSMQ privada utilizando la ruta:Conexión a una cola de MSMQ privada remota

"FormatName:DIRECT=OS:remoteMachineName\Private$\MyQueue" 

y estoy consiguiendo el error siguiente:

"The specified format name does not support the requested operation. For example, a direct queue format name cannot be deleted." 

I Obviamente estoy haciendo algo mal. Sin embargo, esto funciona usando una cola local.

Estoy usando el Messaging de Spring.Net. Aquí está mi configuración

<objects xmlns="http://www.springframework.net"> 
    <object id="myQueue" type="Spring.Messaging.Support.MessageQueueFactoryObject, Spring.Messaging"> 
    <property name="Path" value="FormatName:DIRECT=OS:remoteMachineName\Private$\MyQueue"/> 
    </object> 

    <object id="messageQueueTemplate" type="Spring.Messaging.Core.MessageQueueTemplate, Spring.Messaging"> 
    <property name="DefaultMessageQueueObjectName" value="myQueue"/> 
    </object> 

    <object id="messageGateway" type="My.MessageGateway, My.Assembly"> 
    <property name="MessageQueueTemplate" ref="messageQueueTemplate"/> 
    </object> 
</objects> 
+0

¿Está operando dentro de un dominio de Active Directory, o están los servidores independientes? –

Respuesta

5

¿Es esta una cola transaccional? La lectura remota de la cola transaccional no es posible. Tal vez el marco de primavera intente comprobar si se trata de una cola transaccional, y esta también es una operación que solo se admite en la cola local.

La recomendación de por qué trabajar con colas es escribir en la cola remota y leer desde la cola local. En msmq 4.0 (vista y windows 2008) la lectura transaccional remota es compatible (así lo he escuchado).

¿Se puede depurar el código de spring.net y ver el código exacto cuando falla el proceso?

0

lo primero que llama la atención es la carcasa de su dirección de punto final. Al menos, todos los demás ejemplos publicados en este hilo o here utilizan una carcasa diferente. Segundo, no estás escapando de las barras invertidas dentro de la cadena. En lugar de

"FormatName:DIRECT=OS:remoteMachineName\Private$\MyQueue" 

tratar

"FormatName:Direct=OS:remoteMachineName\\private$\\MyQueue" 

HTH, Erich

+2

Escapar barras diagonales inversas es una cosa de codificación C#. Esto no se aplica a los archivos de configuración XML. Además, el enlace infosysblogs.com de Ken explica que la distinción entre mayúsculas y minúsculas solo se aplica a "FormatName" y no a "Direct". – spoulson

0

los documentos de ayuda de Microsoft afirman que las colas privadas sólo están "disponibles" en el equipo local:

Pública las colas se replican a través de la red de Message Queue Server y se puede acceder potencialmente mediante una ll de los sitios conectados por la red.

Las colas privadas no se publicaron en toda la red. En cambio, son disponibles solo en la computadora local que los contiene. Solo las aplicaciones que conocen el nombre completo de la ruta o la etiqueta de la cola pueden acceder a las colas privadas.

(desde: http://msdn.microsoft.com/en-us/library/19ww660c(VS.71).aspx).

¡Esto es todo un poco ambiguo realmente!

Otro mensaje el desbordamiento de la pila hace referencia a este artículo:

http://technet.microsoft.com/ja-jp/library/cc753440(WS.10).aspx

que tiene una descripción mucho más útil de Público vs Las colas privadas.

+8

El punto inicial es un poco engañoso. Las colas privadas ESTÁN disponibles de forma remota, simplemente no se publican en un Directorio Activo. Para acceder a una cola privada remota, como dices, necesitas saber el nombre completo o la etiqueta de la cola. –

0

su tratando es correcta, pero hay que definir otras dos propiedades para el objeto que indica la cola es remota o no y es transaccional o no:

<object id="myQueue" 
     type="Spring.Messaging.Support.MessageQueueFactoryObject,Spring.Messaging">  
    <property name="Path" value="FormatName:DIRECT=OS:remoteMachineName\Private$\MyQueue"/> 
    <property name="RemoteQueue" value="true"/> 
    <property name="RemoteQueueIsTransactional" value="true"/> 
</object> 
Cuestiones relacionadas