2013-02-11 3 views
1

Я постоянно получаю сообщение об ошибке при попытке отправить очередиCant получить MSMQ работать правильно

Указанное имя формата не поддерживает запрошенную операцию. Например, имя формата прямой очереди не может быть удалено.

имя Моя очередь хранится в конфигурационном файле и выглядит следующим образом

"FORMATNAME: Прямая = OS: MyComputerName \ PRIVATE $ \ MyQueue"

Есть 2 очередей, которые существуют, каждая очередь имеет разрешения, установленные для ВСЕХ.

SyncUser можно предположить = «все» или «My_Domain \ оператор»

//init the queues 
qSync = new MessageQueue(queueName + "-sync") 
      {Formatter = new XmlMessageFormatter(new Type[] {typeof (String)})}; 

qClient = new MessageQueue(queueName + "-client") 
      {Formatter = new XmlMessageFormatter(new Type[] { typeof(String) })}; 

Создание очередей не вызывает каких-либо ошибок, но я получаю ошибки, когда я называю эту функцию Отправить

**Send(qSync, "This is a message");** //Example 

public void Send(MessageQueue queue, string msg) 
{ 
    try 
    { 
     queue.Send(msg); 
    } 
    catch (MessageQueueException mqx) 
    { 
     var e = string.Format("Failed to Send - {0} | {1}", queue.QueueName, mqx.Message); 
     OnSynchronizerMonitor(new SyncEvent(e)); 
    } 
} 

Любая помощь будет принята с благодарностью.

EDIT

кажется, что мои сообщения ARE делают его свое удаленный адрес назначения очереди, но приложение все еще бросает эту ошибку на каждом отправленном сообщении. Если во время отладки я смотрю на MessageQueues (qSync | qClient), эта ошибка появляется в нескольких внутренних полях, прежде чем она будет использоваться.

+0

Вы пытаетесь отправить на удаленную машину? Все ли работает, если все работает на локальной машине? Также ваши транзакции транслируются? –

+0

Да, это удаленная машина, Slave будет работать локально, и, похоже, она работает нормально, но все, что она делает, считывает из очереди, поэтому на данный момент она не была хорошо протестирована. И это не транзакционная очередь – Zholen

+0

Вы вызываете Queue.Send(), но вы не показывали, как настроена очередь. –

ответ

0

Я надеюсь, что кто-то может подтвердить это для меня, поскольку я не могу найти какие-либо вопросы форума или документацию, которые поддерживают это, но похоже, что MessageQueue имеет проблему с настройкой моего события.

Я удалил вызов события и просто запрограммировал создание очереди и отправил ее на место в моем основном процессе, и все сработало нормально.

Моя установка так:

служба - Создает процессор, синхронизатор, и устанавливает события.

Процессор запускает thread, в котором он обрабатывает строковые транзакции, при успешном процессе транзакция должна быть отправлена ​​через Synchronizer, поэтому процессор запускает событие.

Синхронизатор уже создал очереди и просто ждет событий, которые будут запущены для отправки сообщений.

Если кто-то может пролить свет, если это может быть проблема с поперечной нитью или просто причуда в моей системе, это будет оценено.

* * После небольшого исследования и некоторых проб и ошибок, похоже, я получаю сообщение об ошибке из-за осложнения поперечного потока события. Я предполагаю, что аналогичная проблема связана с обновлением объектов пользовательского интерфейса из другого потока, чем тот, на котором он был создан. Ошибка, по сути, является проблемой собственности. Сообщения все еще идут, но очередь жалуется, что ее первоначальный владелец не тот, который инициировал вызов.

Смежные вопросы