重用WCF契约接口,但保留使用声明性配置

时间:2015-08-06 14:47:28

标签: c# wcf .net-4.5

我们在这个旧主题("WCF Service Reference generates its own contract interface, won't reuse mine")中使用了解决方案,但这只能解决重用接口的问题。如果可能的话,我们想要做的是保留使用配置文件来使用<system.serviceModel>节点的所有铃声和口哨在WCF客户端上设置和配置各种选项。

给出的方法迫使我们在代码中完成所有这些,并且已经证明在某一时刻已成为问题(我们必须更改绑定配置参数,这迫使我们完成整个公司变更请求审批流程改变代码库中的两行,与更改配置文件的请求相比,这是一个巨大的麻烦)。

是否有结合这两个世界的解决方案?

2 个答案:

答案 0 :(得分:1)

假设您有IService作为服务合同,并且它在客户端和服务器之间共享。

然后在客户端代码中你会有这样的东西:

ChannelFactory<IService> factory = new ChannelFactory<IService>("ServiceClient");
var channel = factory.CreateChannel();
var result = channel.GetData(1);

在客户端app.cofnig中,您将看到如下所示的部分:

<system.serviceModel>
  <client>
    <endpoint name="ServiceClient" address="http://localhost:51377/service.svc" binding="basicHttpBinding"
            contract="Common.IService"/>
  </client>
</system.serviceModel>

简要说明ChannelFactory使用Channel中的IService端点配置创建ServiceClient来访问app.config服务。

您可以根据需要扩展serviceModel配置。只需添加其他代码,即可在操作完成后正确关闭通道。

答案 1 :(得分:0)

你想要实现的是什么?好像你正在尝试重用合同,但让SVCUTIL / VS生成ClientBase&lt; T&gt; -derived类并修改.config文件?

如果是这样,我认为这不是一个支持的场景,真的。老实说,如果您需要重用服务合同接口,您也可以手动实现基于ClientBase&lt; T&gt;的代理类。这只是一些额外的工作,从长远来看会让你的生活更轻松。

虽然SVCUTIL / VS中没有受支持的选项只导入绑定配置而不是整个绑定配置,因此您可能需要手动编写配置文件(或从手册中复制它)运行SVCUTIL)。