重用 WCF 契约接口,但保留对声明性配置的使用
Reuse WCF contract interface, but retain use of declarative configuration
我们使用了这个老话题("WCF Service Reference generates its own contract interface, won't reuse mine")的解决方案,但那只是解决了接口重用的问题。如果可能的话,我们还想保留配置文件的使用,以便使用 <system.serviceModel>
节点的所有功能在 WCF 客户端设置和配置各种选项。
给出的方法迫使我们在代码中完成所有这些,并且已经证明在某一点上是一个问题(我们不得不更改绑定配置参数,这迫使我们完成整个公司更改请求更改代码库中两行的批准过程,与更改配置文件的请求相比,这是一个巨大的麻烦)。
是否有结合这两个世界的解决方案?
您要实现的目标到底是什么?似乎您正在尝试重用合同,但是 SVCUTIL/VS 生成了 ClientBase 派生的 class 并修改了 .config 文件?
如果是这样,我认为这不是受支持的方案,真的。老实说,如果您需要重用您的服务契约接口,您还不如手动实现基于 ClientBase 的代理 class。这只是一点点额外的工作,从长远来看会让你的生活更轻松 运行.
SVCUTIL/VS 中不支持仅导入绑定配置而不是整个配置的选项,因此您可能还需要手动编写配置文件(或复制它来自 SVCUTIL 的手册 运行)。
假设您有 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
使用 app.config
中的 ServiceClient
端点配置创建 Channel
以访问 IService
服务。
您可以根据需要扩展serviceModel配置。只需添加额外的代码即可在操作完成后正确关闭频道。
我们使用了这个老话题("WCF Service Reference generates its own contract interface, won't reuse mine")的解决方案,但那只是解决了接口重用的问题。如果可能的话,我们还想保留配置文件的使用,以便使用 <system.serviceModel>
节点的所有功能在 WCF 客户端设置和配置各种选项。
给出的方法迫使我们在代码中完成所有这些,并且已经证明在某一点上是一个问题(我们不得不更改绑定配置参数,这迫使我们完成整个公司更改请求更改代码库中两行的批准过程,与更改配置文件的请求相比,这是一个巨大的麻烦)。
是否有结合这两个世界的解决方案?
您要实现的目标到底是什么?似乎您正在尝试重用合同,但是 SVCUTIL/VS 生成了 ClientBase
如果是这样,我认为这不是受支持的方案,真的。老实说,如果您需要重用您的服务契约接口,您还不如手动实现基于 ClientBase
SVCUTIL/VS 中不支持仅导入绑定配置而不是整个配置的选项,因此您可能还需要手动编写配置文件(或复制它来自 SVCUTIL 的手册 运行)。
假设您有 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
使用 app.config
中的 ServiceClient
端点配置创建 Channel
以访问 IService
服务。
您可以根据需要扩展serviceModel配置。只需添加额外的代码即可在操作完成后正确关闭频道。