如何将自定义IOperationInvoker添加到端点中的每个操作

时间:2010-06-19 01:41:25

标签: c# wcf

我的服务中需要自定义 IOperationInvoker 。我有它工作得很好,但我不特别喜欢这样的想法,为了将它应用于给定的操作,我必须使它成为一个属性。我似乎找不到任何关于如何基于配置的文档(类似于端点上的 MessageInspector )。

我创建了一个实现 IEndpointBehavior 的CustomBehavior。在 ApplyDispathBehavior 中,我有以下内容:

public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
    foreach (var operation in endpointDispatcher.DispatchRuntime.Operations)
    {
        operation.Invoker = new MockServiceOperationInvoker() {Invoker=operation.Invoker };
    }
}

但是,自定义调用程序似乎并没有“坚持”。是否可以在生命周期的后期清除这些更改?

如果我将行为作为属性,那么一切都有效,但我宁愿不这样做。有没有人知道将自定义OperationBInvoker应用于给定端点中的所有方法的更好方法?

非常感谢!

1 个答案:

答案 0 :(得分:2)

我想我明白了。通过循环遍历每个操作,我可以向其添加行为。我不知道这是不是最好的方法,但确实有效。

public class MockOperationBehavior : BehaviorExtensionElement,  IOperationBehavior, IEndpointBehavior
{
  public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
  {
     foreach (var op in endpoint.Contract.Operations)
     {
         op.Behaviors.Add(this);
     }
  }
}