0

Так наткнулся на эту странную проблему. Я пытаюсь получить сообщение от не аутентифицированного транзакционного msmq. Моей средой является:MSMQ Ошибка удаленного приема «Указанное имя формата не поддерживает запрошенную операцию»

  • Сервер, на котором находится очередь Windows Server 2012 R2. Это также сервер БД (SQL Server)
  • сервер, на котором установлена ​​клиентское приложение также Windows Server 2012 R2

Я пытаюсь отправить сообщение с SQL Server для MSMQ (который прекрасно работает). Но когда клиентское приложение пытается получить сообщение с использованием кода ниже, оно вызывает ошибку, о которой я упоминал в названии.

private void OnPeekCompleted(object sender, PeekCompletedEventArgs args) 
    { 
     MessageQueue mq = (MessageQueue)sender; 
     if (mq != null) 
     { 
      try 
      { 
       if (Log.IsInfoEnabled) 
       { 
        Log.InfoFormat("[{0}] Starting processing message queue {1}", _endpoint.RouteName, _queue.QueueName); 
       } 
       mq.EndPeek(args.AsyncResult); 
       MessageQueueTransaction transaction = new MessageQueueTransaction(); 
       transaction.Begin(); 
       Message message = mq.Receive(transaction); 
       ... // omitted for simplicity 

Я не могу получить доступ к серверу клиента с сервером БД, следовательно, мне нужно иметь очереди сообщений на том же сервере БД, так как я отправляю сообщение в очередь из SQL

Я проверил следующее :

  1. Нет проблема отправки сообщения из SQL
  2. Нет н/ж вопрос доступности между серверами
  3. Un-аутентифицированный вызовы RPC являются включить в свойствах безопасности сервера сообщений очереди
  4. Формат очереди правилен. Я использую прямой формат ОС. Также попробовал формат TCP, указав IP-адрес вместо имени машины

Но напрасно. Есть идеи?

Благодаря

+0

Каков адрес очереди? –

+0

И работала ли это раньше и перестала работать? –

ответ

0

Если это работало раньше и перестал работать, ваша проблема почти наверняка связано с изменением DTC на любом отправителя или получателя, изменения в брандмауэре, или обоих.

Согласно this guidance вам может понадобиться:

... настроить как компьютер очереди и клиентский компьютер, чтобы включить сети DTC доступа.

и

... Настройка брандмауэра Windows для добавления MS DTC в список исключений.

Если это никогда не работало, то это может быть один из нескольких других вопросов, но, как указано here, дистанционное чтение «не входит в оптимальной модели обмена сообщений», то есть оптимальная парадигма принята для MSMQ является посылом -remote, read-local. Подумайте об изменении вашей архитектуры, чтобы не использовать удаленные чтения.

+0

Спасибо Том. Я слышал, что вы относитесь к дистанционному чтению и понимаете его не рекомендованную модель. Мы пытаемся извлечь некоторую тяжелую нагрузку с приложения, создав запланированное задание SQL и получим, что он выполняет SP, который отправляет сообщение в очередь сообщений.Проблема в том, что сервер приложений недоступен с сервера БД, поэтому очередь должна находиться на сервере Db, и я надеялся, что смогу сделать удаленное чтение с сервера приложений. Я попытаюсь проверить настройки DTC и настройки брандмауэра, как вы предложили. благодаря – Jinish