Как реализовать обработчик управления доступом в NServiceBus

Просто хотел узнать, есть ли способ реализовать обработчик сообщений управления доступом в NServiceBus. Под «обработчиком управления доступом» я имею в виду, что один обработчик всегда должен выполняться раньше других обработчиков и должен контролировать (или, скорее, предотвращать условно выполнение другого обработчика).

Кто-нибудь знает, как это реализовать в NServiceBus?

Я указал приоритет обработчиков для выполнения в EndPointConfig, так как это

public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, ISpecifyMessageHandlerOrdering
{
    #region ISpecifyMessageHandlerOrdering Members

    public void SpecifyOrder(Order order)
    {
        order.Specify<First<AccessControlHandler>>();
    }

    #endregion
}

Заранее спасибо,

Виджай.


person vijaysylvester    schedule 29.11.2010    source источник


Ответы (1)


Вы можете создать свой AccessControlHandler, как показано ниже.

 public class AccessControlHandler : IHandleMessages<IMessage>
{
    public IBus Bus { get; set; }

    public void Handle(IMessage message)
    {
        IDictionary<string, string> headers = Bus.CurrentMessageContext.Headers;
        string token;

        if (headers.TryGetValue("access_token", out token))
        {
            if (token == "MY_SECRET")
            {
                Console.WriteLine("User authenticated");
                return;
            }
        }

        Console.WriteLine("User not authenticated");
        Bus.DoNotContinueDispatchingCurrentMessageToHandlers();
    }

Последняя строка является важной, так как она сообщает шине, что сообщение успешно выполнено, но не передает сообщение дальше по конвейеру.

person Phill Duffy    schedule 30.04.2015