2013-06-14 2 views
3

Прежде чем отправлять этот вопрос, я просматривал все темы форума. Я обнаружил, что моя проблема похожа на Sending to authenticated queue Однако эта тема не отвечает на мой вопрос.Отправка сообщения в закрытую очередь MSMQ с проверкой подлинности?

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

  • Installed MSMQ с режимом Active Directory Services Integrated на моем Windows7 64-битной машине.
  • Я создал две приватные очереди (PQ1 и PQ2) в качестве транзакционных очередей и настроил вкладку «Безопасность», чтобы предоставить полный доступ к идентификатору пользователя домена (идентификатор пользователя домена, который также является администратором на компьютере 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 и proccesses его

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

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

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

Вашей помощи не высоко ценится, чтобы приложения работали с Authenticated Queue ,

+0

, как выглядит файл .config как для MSMQ связывания? – Jocke

+0

Вот конфигурация привязки для службы WCF: <режим безопасности = "Транспорт"> <транспорт msmqAuthenticationMode = "WindowsDomain" msmqProtectionLevel = "EncryptAndSign" />

ответ

4

После инициализации объекта 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); 
} 
Смежные вопросы