创建没有自动生成代理的WCF客户端
看着
WCF ChannelFactory与生成代理
似乎创建WCF客户端的最佳做法是创建代理(非自动生成)。
我一直在网上看了一段时间,我没有找到任何完整的例子(代理类,web.config)
你能提供一个例子或资源链接吗?
我相信这篇文章正是你要问的问题:
WCF手动方式……正确的方法
但是,分享了这一点后,手动创建代理可能并不总是最好的利用您的时间。 这篇文章介绍了这样做的一些很好的理由 – 你肯定会有更多的控制权,你的客户可能会有更轻松的时间等等。但总的来说,像这样手动操作需要更多的时间,并向用户解释服务到底如何使用您提供的代理可能会很痛苦。
WCF允许元数据交换和发现是有原因的,VS会自动为您创建代理。
无论哪种方式,它都是一篇很酷的文章,也是值得学习的技巧。
我就是这样做的。
获得服务合同和数据合同
如果我有权访问服务代码,我就拥有所有合同。 如果没有,我可以使用svcutil或Add 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正确。 您需要了解绑定和端点 。 这有点学习曲线,但没什么大不了的。
以下是基本步骤。
- 像平常一样创建您的服务。
- 将服务实现的接口移动到可与客户端共享的程序集中。
- 创建一个ChannelFactory,其中T是您的界面。 您必须将uri服务提供给构造函数。
- 调用factory.CreateChannel()。 这将是T型。
- 使用该频道拨打电话。
这真的很简单。 没有自动生成的代码,没有服务引用。 使用异步调用和Silverlight会有点复杂,但不会太多。