2010-11-09 1 views
0

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

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

[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, но я не мог определить ou t как получить доступ к вызову DisppatchOperation, который в настоящее время вызывается.

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

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

+0

Если все операции должны реализовывать то же поведение, почему бы вам не заботиться о том, какая операция вызывается в методе «ApplyDispatchBehavior»? –

+0

В приложении ApplyDispatchBehavior я добавляю IParameterInspector для отправкиОперации.ParameterInspectors – djmc

ответ

2

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

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

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

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

+0

чертовски, вы правы. что почти сработало. Я раньше не видел свойство Endpoints, потому что я использовал цикл foreach с экземпляром var вместо того, чтобы вставлять его в ChannelDispatcher (var не показывает свойство Endpoints). Но в конце концов, я смог добавить инспектора в ParameterInspectors, но почему-то инспектор никогда не звонит! – djmc

+0

Я поиграю с этим несколько позже .. он должен работать. – djmc

+0

ok причина, по которой он не работал для меня изначально, был потому, что я добавлял свой атрибут IServiceBehavior к контракту на обслуживание, а не к классу реализации сервиса ... Большое спасибо за ответ joe! – djmc

 Смежные вопросы

  • Нет связанных вопросов^_^