创建没有自动生成代理的WCF客户端

看着

WCF ChannelFactory与生成代理

似乎创建WCF客户端的最佳做法是创建代理(非自动生成)。

我一直在网上看了一段时间,我没有找到任何完整的例子(代理类,web.config)

你能提供一个例子或资源链接吗?

我相信这篇文章正是你要问的问题:

WCF手动方式……正确的方法

但是,分享了这一点后,手动创建代理可能并不总是最好的利用您的时间。 这篇文章介绍了这样做的一些很好的理由 – 你肯定会有更多的控制权,你的客户可能会有更轻松的时间等等。但总的来说,像这样手动操作需要更多的时间,并向用户解释服务到底如何使用您提供的代理可能会很痛苦。

WCF允许元数据交换和发现是有原因的,VS会自动为您创建代理。

无论哪种方式,它都是一篇很酷的文章,也是值得学习的技巧。

我就是这样做的。

获得服务合同和数据合同

如果我有权访问服务代码,我就拥有所有合同。 如果没有,我可以使用svcutilAdd Service Reference来生成它们。

制作配置

我使用Add Service Reference来获取app.config文件。 然后我删除它生成的所有其他内容。 根据需要编辑app.config。

定义工厂

说我有服务合同IFooService

 interface IFooServiceChannel : IFooService, IClientChannel { } 

这就是字面意思。 没有会员。

创建工厂

 fooServiceFactory = new ChannelFactory( "NetTcpBinding_IFooService"); 

字符串“NetTcpBinding_IFooService”是app.config中binding元素的name属性。

创建频道

 fooService = fooServiceFactory.CreateChannel(); 

用它

 fooService.DoSomething(); 

最棘手的部分是让app.config正确。 您需要了解绑定端点 。 这有点学习曲线,但没什么大不了的。

以下是基本步骤。

  1. 像平常一样创建您的服务。
  2. 将服务实现的接口移动到可与客户端共享的程序集中。
  3. 创建一个ChannelFactory,其中T是您的界面。 您必须将uri服务提供给构造函数。
  4. 调用factory.CreateChannel()。 这将是T型。
  5. 使用该频道拨打电话。

这真的很简单。 没有自动生成的代码,没有服务引用。 使用异步调用和Silverlight会有点复杂,但不会太多。