Могу ли я создать ServiceBehavior, который заменит OperationBehaviors, который я уже применяю к каждой операции в моей службе? - PullRequest
0 голосов
/ 09 ноября 2010

Я знаю, что все операции в этой службе потребуют одного и того же OperationBehavior. Могу ли я реализовать ServiceBehavior, который будет выполнять те же функции до запуска операции?

В настоящее время у меня есть:

[ServiceContract]
public interface IService
{
    [AuthTokenValidation]
    [OperationContract]
    string DoThis(string authtoken);
}

Я хочу заменить его на:

[AuthTokenValidation]
[ServiceContract]
public interface IService
{
    [OperationContract]
    string DoThis(string authtoken);
}

Внутри моего атрибута AuthTokenValidation у меня есть следующий код в методе ApplyDispatchBehavior:

public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
{
    AuthTokenInspector inspector;

    inspector = new AuthTokenInspector(AuthTokenIndex);
    dispatchOperation.ParameterInspectors.Add(inspector);
}

Я проверил метод ApplyDispatchBehavior вIServiceBehavior, но я не мог понять, как получить доступ к DisppatchOperation, который в данный момент вызывается.

public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
    //Can I reach the OperationDispatch from in here??
}

Это правильный способ использования ServiceBehavior или я должен быть просто удовлетворен OperationBehaviors для реализации этой функции?

1 Ответ

2 голосов
/ 09 ноября 2010

Я не пробовал, но я бы подумал, что вы можете добраться до своей DispatchOperation следующим образом:

  • serviceHostBase.ChannelDispatchers (получить коллекцию ChannelDispatchers)

  • ChannelDispatcher.Endpoints (получить конечные точки для ChannelDispatcher)

  • Endpoint.DispatchRuntime.Operations (получить операции для конечной точки)

...