WCF ChannelFactory 与生成代理

2023-11-22

只是想知道当您可以使用 ChannelFactory 调用时,在什么情况下您更愿意从 WCF 服务生成代理?

这样你就不必生成代理并担心服务器更新时重新生成代理了?

Thanks


创建 WCF 客户端有 3 种基本方法:

  1. 让 Visual Studio 生成您的代理。这会自动生成通过读取 WSDL 连接到服务的代码。如果服务因任何原因发生变化,您必须重新生成它。这样做的一大优点是它很容易设置 - VS 有一个向导,而且都是自动的。缺点是您依赖 VS 为您完成所有艰苦的工作,因此您会失去控制。

  2. Use ChannelFactory具有已知的接口。这依赖于您拥有描述服务(服务契约)的本地接口。最大的优点是可以更轻松地管理更改 - 您仍然需要重新编译和修复更改,但现在您不是重新生成代码,而是引用新接口。通常,当您控制服务器和客户端时,会使用此方法,因为可以更轻松地模拟两者以进行单元测试。然而,可以为任何服务编写接口,甚至是 REST 服务 - 看看这个 Twitter API.

  3. 编写您自己的代理 - 这相当容易做到,特别是对于 REST 服务,使用HttpClient or WebClient。这为您提供了最精细的控制,但代价是大量服务 API 位于字符串中。例如:var content = new HttpClient().Get("http://yoursite.com/resource/id").Content;- 如果 API 的详细信息发生更改,您在运行时之前不会遇到错误。

就我个人而言,我从来不喜欢选项 1——依赖自动生成的代码很混乱并且失去了太多的控制。另外,它经常会产生序列化问题 - 我最终会得到两个相同的类(一个在服务器代码中,一个自动生成),这可以解决,但很痛苦。

选项 2 应该是完美的,但是 Channels 有点太有限了 - 例如它们完全丢失HTTP错误的内容。也就是说,拥有描述服务的接口更容易编码和维护。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WCF ChannelFactory 与生成代理 的相关文章

随机推荐