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

时间:2011-12-02 19:39:09

标签: c# wcf

看着

WCF ChannelFactory vs generating proxy

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

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

您能提供一个示例或资源链接吗?

3 个答案:

答案 0 :(得分:19)

这篇文章正是关于你的问题,我相信:

WCF the Manual Way... The Right Way

分享了这一点后,手动创建代理可能并不总是最好的利用你的时间。本文介绍了这样做的一些重要原因 - 您当然可以拥有更多控制权,您的客户可能会有更轻松的时间等等。但总体而言,像这样手动操作需要更多时间,并向用户解释你的服务究竟如何使用你提供的代理可能会很痛苦。

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

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

答案 1 :(得分:11)

我就是这样做的。

获取服务合同和数据合同

如果我有权访问服务代码,我就拥有了所有合同。如果没有,我可以使用 svcutil 添加服务参考来生成它们。

制作配置

我使用添加服务参考来获取app.config文件。然后我删除它生成的所有其他内容。根据需要编辑app.config。

定义工厂

说我有服务合同IFooService

interface IFooServiceChannel : IFooService, IClientChannel { }

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

创建工厂

fooServiceFactory = new ChannelFactory<IFooServiceChannel>(
                        "NetTcpBinding_IFooService");

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

制作频道

fooService = fooServiceFactory.CreateChannel();

使用

fooService.DoSomething();

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

答案 2 :(得分:8)

以下是基本步骤。

  1. 像平常一样创建您的服务。
  2. 将服务实现的接口移动到可与客户端共享的程序集中。
  3. 创建一个ChannelFactory,其中T是您的界面。您必须将uri服务提供给构造函数。
  4. 调用factory.CreateChannel()。这将是T型。
  5. 使用该频道拨打电话。
  6. 真的很简单。没有自动生成的代码,没有服务引用。使用异步调用和Silverlight会有点复杂,但不会太多。