Я использую NServiceBus в своем собственном процессе (поэтому не с использованием общего хоста), и я хотел бы иметь несколько обработчиков сообщений для сообщения в определенном порядке.Для Generic Host вы бы реализовали ISpecifyMessageHandlerOrdering
, но я не знаю, как это сделать при размещении вашего собственного процесса NServiceBus, так как этот интерфейс определен в NServiceBus.Host.exe
, и я не смог найти другой способ сделатьэтот.
Целью этого является аутентификация пользователя: перед вызовом фактического обработчика сообщений я сначала хотел бы аутентифицировать отправителя сообщения, что произошло бы в другом, более общем, обработчике сообщений.Сообщение будет иметь тип, который содержит зашифрованное имя пользователя и пароль и / или идентификатор сеанса.Этот тип будет использоваться почти для всех команд, отправляемых на сервер (я думаю, все, кроме входа в систему).Это нормальный способ аутентификации пользователя с использованием NServiceBus?
В настоящее время он выбирает второй обработчик, но не в правильном порядке.
Обновление
По предложению Дэвида я попытался создать IMessageModule
и чтение заголовков из CurrentMessageContext
для аутентификации пользователя.
Я столкнулся с некоторыми проблемами здесь:
- Когда я отправляю сообщение в первый раз,
bus.CurrentMessageContext
null
.Каждый раз после этого он заполняется правильно, и я могу читать заголовки. - Вызов
bus.DoNotContinueDispatchingCurrentMessageToHandlers
, когда пользователь не аутентифицирован, не останавливает вызов обработчиков сообщений.Также не bus.Return(errorCode)
.Есть ли другие способы, которыми я могу сделать это?