包装样板 wcf 客户端代码

Wrap boilerplate wcf client code

我必须将 header 添加到 wcf 服务调用。

我是这样实现的:

var client = new ServiceReference1.HeaderConsumeClient("NetTcpBinding_IHeaderConsume");
using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
{
    Guid apiKey = Guid.NewGuid();
    MessageHeader<Guid> mhg = new MessageHeader<Guid>(apiKey);
    MessageHeader untyped = mhg.GetUntypedHeader("apiKey", "ns");
    OperationContext.Current.OutgoingMessageHeaders.Add(untyped);

    var res = client.GetData(1);
    Console.WriteLine(res);
}

但我想在每次服务调用时都提供没有此类样板代码的通用解决方案。

我认为最常见的方法是 制作我自己的 TT4 模板 并将每个调用包装在生成的代理中。

但在完成之前我想知道,是否有一些其他方法来覆盖或修饰 wcf 生成的 类 方法?

例如 - 我可以使用 unity 并注册此服务接口的实现,并将拦截器添加到对此实例的所有调用。但是看起来有点复杂。

您可以只使用自定义端点行为来对每个服务调用执行常见操作。您还可以编写自定义服务和操作行为。

例如,您可以实现 IClientMessageInspector 并使用 BeforeSend method,您可以操纵要发送的消息。

msdn里有个example