Как получить 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, как я упоминал в комментариях.