我想将自己的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
}
答案 0 :(得分:2)
你必须在这里混淆一些东西。
IOperationInvoker
是服务器端唯一的扩展点。它允许您检查传入的消息,并根据该消息(其内容,标题 - 无论如何)调用服务上的特定操作。
在客户端,这根本没有意义 - 客户端无法使用IOperationInvoker
实现。
如果您想知道如何在服务器端添加IOperationInvoker
实施,请查看this blog post以获得完整的停止。
有关WCF可扩展性的出色通用介绍,请查看Aaron Skonnards MSDN article here。
马克
答案 1 :(得分:1)
听起来您可能会更好地实施IClientMessageInspector扩展程序。
答案 2 :(得分:-3)
您错过了IOperationBehavior
public class MyOperationBehavior : IOperationBehavior
{
public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
{
dispatchOperation.Invoker = new MyOperationInvoker();
}
}