包装样板wcf客户端代码

时间:2016-01-15 13:42:35

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

我必须将标头添加到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并注册此服务接口的实现,并为所有对此实例的调用添加拦截器。但它看起来有点过于复杂。

1 个答案:

答案 0 :(得分:1)

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

例如,您可以实施IClientMessageInspector并使用BeforeSend method,您可以操纵要发送的邮件。

msdn。中有example