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

C# 创建没有自动生成代理的WCF客户端,c#,wcf,C#,Wcf,看着 似乎创建WCF客户端的最佳实践是创建代理(不是自动生成的) 我在网上搜索了一段时间,没有找到任何完整的示例(代理类,web.config) 你能提供一个例子或参考资料的链接吗?这篇文章正是关于你要问的问题,我相信: 不过,在分享了这一点之后,手动创建代理可能并不总是最好地利用您的时间。这篇文章探讨了这样做的一些很好的原因——你肯定会有更多的控制权,你的客户可能会更轻松,等等。但总的来说,像这样手动操作会占用你更多的时间,向你的服务用户确切地解释如何使用你提供的代理可能是一件痛苦的事情

看着

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

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


你能提供一个例子或参考资料的链接吗?

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

不过,在分享了这一点之后,手动创建代理可能并不总是最好地利用您的时间。这篇文章探讨了这样做的一些很好的原因——你肯定会有更多的控制权,你的客户可能会更轻松,等等。但总的来说,像这样手动操作会占用你更多的时间,向你的服务用户确切地解释如何使用你提供的代理可能是一件痛苦的事情

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


不管怎样,这都是一篇很酷的文章,也是一种值得学习的技巧。

以下是基本步骤

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

    我就是这样做的

    获取服务合同和数据合同

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

    进行配置

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

    定义工厂

    fooServiceFactory = new ChannelFactory<IFooServiceChannel>(
                            "NetTcpBinding_IFooService");
    
    假设我有一份服务合同
    IFooService

    interface IFooServiceChannel : IFooService, IClientChannel { }
    
    确实如此。没有成员

    创建工厂

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

    fooService.DoSomething();
    

    最棘手的部分是正确使用app.config。您需要了解绑定和端点。这是一个学习曲线,但没有什么激烈的变化。

    还有一个视频以视觉和非常详细的方式解释了这一点!我得去看看!:)刚刚看完视频…………太好了!!这就是我要找的!!感谢OP表示他已经发现手动创建代理是一种最佳实践,并且正在寻找推荐的方法来实现这一点。