我们在这个旧主题("WCF Service Reference generates its own contract interface, won't reuse mine")中使用了解决方案,但这只能解决重用接口的问题。如果可能的话,我们想要做的是保留使用配置文件来使用<system.serviceModel>
节点的所有铃声和口哨在WCF客户端上设置和配置各种选项。
给出的方法迫使我们在代码中完成所有这些,并且已经证明在某一时刻已成为问题(我们必须更改绑定配置参数,这迫使我们完成整个公司变更请求审批流程改变代码库中的两行,与更改配置文件的请求相比,这是一个巨大的麻烦)。
是否有结合这两个世界的解决方案?
答案 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)。