【问题标题】:Create WCF Client without auto generated proxy创建没有自动生成代理的 WCF 客户端
【发布时间】:2012-01-11 19:06:42
【问题描述】:

看着

WCF ChannelFactory vs generating proxy

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

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

您能否提供示例或资源链接?

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

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

    WCF the Manual Way... The Right Way

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

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

    不管怎样,这是一篇很酷的文章和值得学习的技术。

    【讨论】:

    • 还有一个Miguel Castro on Extreme WCF 的视频,它直观而详细地解释了这一点
    • 酷马克!我得去看看! :)
    • 刚看完视频…………太好了!!这就是我要找的!!谢谢
    【解决方案2】:

    我就是这样做的。

    获取服务合同和数据合同

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

    进行配置

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

    定义工厂

    假设我有服务合同IFooService

    interface IFooServiceChannel : IFooService, IClientChannel { }
    

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

    创建工厂

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

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

    创建频道

    fooService = fooServiceFactory.CreateChannel();
    

    使用它

    fooService.DoSomething();
    

    最棘手的部分是正确设置 app.config。您需要了解绑定端点。这是一个学习曲线,但并不激烈。

    【讨论】:

    • OP 表示他发现手动创建代理是一种最佳做法,并且正在寻找推荐的方法。
    【解决方案3】:

    以下是基本步骤。

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

    其实就是这么简单。没有自动生成的代码,没有服务引用。使用异步调用和 Silverlight 会稍微复杂一些,但不会太多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      相关资源
      最近更新 更多