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

Gig*_*aPr 21 c# wcf

看着

WCF ChannelFactory与生成代理

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

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

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

Tad*_*ghe 19

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

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

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

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

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

  • [Miguel Castro在Extreme WCF上]也有一段视频(http://www.dnrtv.com/default.aspx?showNum=122),它在视觉和细节上进行了详细解释. (4认同)

Igb*_*man 11

我就是这样做的.

获得服务合同和数据合同

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

制作配置

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

定义工厂

说我有服务合同IFooService:

interface IFooServiceChannel : IFooService, IClientChannel { }
Run Code Online (Sandbox Code Playgroud)

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

创建工厂

fooServiceFactory = new ChannelFactory<IFooServiceChannel>(
                        "NetTcpBinding_IFooService");
Run Code Online (Sandbox Code Playgroud)

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

创建频道

fooService = fooServiceFactory.CreateChannel();
Run Code Online (Sandbox Code Playgroud)

用它

fooService.DoSomething();
Run Code Online (Sandbox Code Playgroud)

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


cad*_*ll0 8

以下是基本步骤.

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

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