Как получить OperationContext из атрибута, реализующего IServiceBehavior/IOperationBehavior

У меня есть атрибут, реализующий IServiceBehavior для защиты моих служб WCF, как показано ниже:

public class AuthorizedServiceAttribute : Attribute, IServiceBehavior
{
    #region IServiceBehavior Members

    public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
    {
    }

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        var token = string.Empty; // to do: get the token from message headers

        foreach (var operation in serviceHostBase.Description.Endpoints
            .SelectMany(endpoint => endpoint.Contract.Operations))
        {
            operation.Behaviors.Add(new AuthorizedMethodAttribute { Token = token });
        }
    }

    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    { }

    #endregion
}

Проблема в том, чтобы получить заголовки сообщений, мне нужно получить текущий OperationContext, но я не знаю, как это сделать внутри ApplyDispatchBehavior. Если я делаю это в безопасных методах, это работает.

1 ответ

Решение

В этом случае я бы предложил использовать Договор сообщения: Договор сообщения

Или вы также можете использовать IDispatchMessageInspector: Message Inspector или IParameterInspector, как я упоминал в комментариях.

Другие вопросы по тегам