【问题标题】:Wrap boilerplate wcf client code包装样板 wcf 客户端代码
【发布时间】:2016-01-15 13:42:35
【问题描述】:

我必须在 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 生成的类方法吗?

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

【问题讨论】:

    标签: c# .net wcf design-patterns inversion-of-control


    【解决方案1】:

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

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

    msdn 中有一个example

    【讨论】:

    • 看起来它非常清晰和可配置的解决方案。我会试试的
    猜你喜欢
    • 2012-04-30
    • 2011-11-09
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    相关资源
    最近更新 更多