Отправка сообщения в личную очередь MSMQ с установленным флажком Authenticate?

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

У меня есть следующие настройки (с помощью приложений.NET и MSMQ)

  • Установлен MSMQ с интегрированным режимом служб Active Directory на моей 64-разрядной машине Windows7.
  • Я создал две частные очереди (PQ1 и PQ2) в качестве транзакционных очередей и настроил вкладку "Безопасность" для предоставления полного доступа к идентификатору пользователя домена (идентификатору пользователя домена, который также является Administartor на компьютере с Win7).
  • В моем проекте у меня есть три приложения.NET 4.0, которые размещены службой Windows (работают с правами доступа с одинаковым идентификатором пользователя домена) на этом компьютере с Windows 7
  • Сначала приложение.NET работает в своем собственном потоке, который считывает данные из базы данных и отправляет сообщение MSMQ в очередь PQ1.
  • Второе и третье - это приложения WCF (например, wcfA и wcfB), которые размещаются в службе Windows.
  • wcfA и wcfB настроены для MsmqIntegrationBinding с режимом безопасности транспорта со свойствами mqAuthenticationMode, равными "WindowsDomain" и msmqProtectionLevel, равными "EncryptAndSign"
  • wcfA принимает сообщения от PQ1, затем обрабатывает сообщение и отправляет другое сообщение MSMQ на PQ2.
  • wcfB получает сообщения от PQ2 и обрабатывает их

Обратите внимание, что в настройках выше все работает нормально.

Однако проблема начинается, когда я включаю "Аутентифицированный" флажок для частных очередей PQ1 и PQ2 на его вкладке General. После этих настроек первое приложение отправляет сообщение MSMQ в личную очередь, но оно попадает в очередь "Сообщения о недоставленных транзакциях". Я попытался добавить группу "Прошедшие проверку" на вкладку "Безопасность очереди" и дать полный доступ, но это не сработало.

В дополнение к этому я также заметил, что на вкладке "Отправитель" на странице свойств сообщения, отправляемого в очередь недоставленных сообщений, указано " Аутентифицировано: нет"

Мы высоко ценим вашу помощь, чтобы приложения работали с Аутентифицированной очередью.

1 ответ

Решение

После инициализации Message объект, установитеUseAuthentication собственность на true,

Пример отправки сообщения в аутентифицированную очередь:

private void SendToQueue(string queueMessage)
{
   var message = new System.Messaging.Message(queueMessage);
   message.UseDeadLetterQueue = true;            

   // This line resolved issue for sending message to queue with Authenticate checkbox checked. 
   message.UseAuthentication = true; 

   var queue = new System.Messaging.MessageQueue(@"FormatName:Direct=OS:.\private$\PQ1");
   queue.Send(message, MessageQueueTransactionType.Single);
}
Другие вопросы по тегам