C# 如何将IOperationInvoker添加到wcf客户端

C# 如何将IOperationInvoker添加到wcf客户端,c#,wcf,C#,Wcf,我想将自己的IOperationInvoker添加到wcf客户端,但无法使其工作。 我有这个 class ClientProgram { static void Main() { CreateClient().SomeMethod(); } private static MyServiceClient CreateClient() { var client = new MyServiceClient(new NetTcpB

我想将自己的IOperationInvoker添加到wcf客户端,但无法使其工作。 我有这个

class ClientProgram
{
    static void Main()
    {
        CreateClient().SomeMethod();
    }

    private static MyServiceClient CreateClient()
    {
        var client = new MyServiceClient(new NetTcpBinding(), new EndpointAddress"net.tcp://localhost:12345/MyService"));
        // I guess this is where the magic should happen
        return client;
    }
}

public class MyOperationInvoker : IOperationInvoker
{
    private readonly IOperationInvoker _innerOperationInvoker;

    public MyOperationInvoker(IOperationInvoker innerOperationInvoker)
    {
        _innerOperationInvoker = innerOperationInvoker;
    }

    public object Invoke(object instance, object[] inputs, out object[] outputs)
    {
        Console.WriteLine("Intercepting...");
        return _innerOperationInvoker.Invoke(instance, inputs, out outputs);
    }

    // Other methods not important
}

你一定是把什么搞混了

IOperationInvoker
是仅服务器端的扩展点。它允许您检查传入消息,并基于该消息(其内容、头-任何内容)调用服务上的特定操作

在客户端,这根本没有意义-客户端无法使用
IOperationInvoker
实现

如果您想知道如何在服务器端添加
IOperationInvoker
实现,请查看完整的运行情况

有关WCF扩展性的优秀通用介绍,请查看Aaron Skonnards


Marc

听起来您可能更适合实现扩展。

您错过了IOperationBehavior

public class MyOperationBehavior : IOperationBehavior
{
    public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
    {
        dispatchOperation.Invoker = new MyOperationInvoker();
    }
}

好的,我正在尝试向服务客户端中的所有方法添加异常处理,有什么方法可以做到这一点吗?我正在拼命扩展生成的
ClientBase
类,这样它就可以独立地处理所有异常和意外的服务器响应,并将它们全部路由到一个地方或事件处理程序,在那里可以决定它们是进行隧道挖掘还是进行处理。更多信息,请参阅我的。