Отправка сообщения в личную очередь 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);
}