Подключение к частной удаленной очереди MSMQ - PullRequest
6 голосов
/ 18 декабря 2008

Я пытаюсь подключиться к удаленной частной очереди MSMQ, используя путь:

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

и я получаю следующую ошибку:

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

Я явно что-то делаю не так. Однако это работает с использованием локальной очереди.

Я использую сообщения Spring.Net . Вот мой конфиг

<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>

Ответы [ 4 ]

5 голосов
/ 18 декабря 2008

Это транзакционная очередь? Удаленное чтение из транзакционной очереди невозможно. Возможно, среда Spring пытается проверить, является ли это транзакционной очередью, и это также операция, которая поддерживается только в локальной очереди.

Для работы с очередями рекомендуется писать в удаленную очередь и читать из локальной очереди. В MSMQ 4.0 (Vista и Windows 2008) поддерживается удаленное чтение транзакций (так я слышал).

Можете ли вы отладить код spring.net и увидеть точный код при сбое процесса?

0 голосов
/ 01 мая 2012

Ваша попытка верна, но вы должны определить два других свойства для вашего объекта, указывающих, что ваша очередь удалена или нет, и является транзакционной:

<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>
0 голосов
/ 28 октября 2010

В справочных документах Microsoft указано, что частные очереди доступны только с локального компьютера:

Публичные очереди реплицируются по всей сети очереди сообщений и потенциально могут быть доступны для всех сайтов, подключенных к сети.

Личные очереди не публикуются по всей сети. Вместо этого они доступны только на локальном компьютере, который их содержит. Частные очереди могут быть доступны только приложениям, которые знают полное имя пути или метку очереди.

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

Это все немного неоднозначно на самом деле!

Еще одна статья о переполнении стека ссылается на эту статью:

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

Имеет гораздо более полезное описание очередей Public и Private.

0 голосов
/ 05 января 2009

первое, что бросается в глаза, - это адрес вашей конечной точки. По крайней мере, все другие примеры, опубликованные в этой теме или здесь , используют другой регистр. Во-вторых, вы не избегаете обратных косых черт в строке. Вместо

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

попробовать

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

НТН, Эрих

...