我可以创建一个ServiceBehavior来替换我已经应用于我的服务中的每个操作的OperationBehaviors吗?

时间:2010-11-09 18:24:06

标签: wcf servicebehavior

我知道此服务中的所有操作都需要相同的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);
}

我检查了IServiceBehavior中的ApplyDispatchBehavior方法,但我无法弄清楚如何访问当前被调用的DisppatchOperation。

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

这是使用ServiceBehavior的正确方法还是我应该对OperationBehaviors感到满意以实现此功能?

1 个答案:

答案 0 :(得分:2)

我没有尝试过,但我认为你可以按照以下方式进入DispatchOperation:

  • serviceHostBase.ChannelDispatchers(获取ChannelDispatcher的集合)

  • ChannelDispatcher.Endpoints(获取ChannelDispatcher的端点)

  • Endpoint.DispatchRuntime.Operations(获取端点的操作)