Как добавить IOperationInvoker в клиент wcf - PullRequest
3 голосов
/ 05 августа 2009

Я хочу добавить свой собственный 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
}

Ответы [ 3 ]

2 голосов
/ 05 августа 2009

Вы должны что-то здесь перепутать.

IOperationInvoker является точкой расширения только на стороне сервера. Он позволяет вам проверять входящее сообщение и вызывать определенную операцию в службе на основе этого сообщения (его содержимое, заголовки - что угодно).

На стороне клиента это вообще не имеет смысла - клиент никак не может использовать реализацию IOperationInvoker.

Если вы хотите узнать, как добавить реализацию IOperationInvoker на стороне сервера, ознакомьтесь с этой записью в блоге для полного завершения работы.

Отличное введение в расширяемость WCF общего назначения можно найти в статье Aaron Skonnards MSDN здесь .

Марк

1 голос
/ 05 августа 2009

Звучит так, как будто вам лучше использовать расширение IClientMessageInspector .

0 голосов
/ 08 августа 2011

Вы пропустили IOperationBehavior

public class MyOperationBehavior : IOperationBehavior
{
    public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
    {
        dispatchOperation.Invoker = new MyOperationInvoker();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...