何时通过服务引用使用 WCF ChannelFactory

When to use WCF ChannelFactory over service reference

我正在浏览 WCF 教程,发现这些教程让我可以使用 mex 端点以允许隐式地向客户端添加服务引用。我想这允许 VS 在使用生成的 WSDL 文件时创建代理 类?

但是,我试图熟悉的代码库不使用隐式服务引用。相反,客户端可以访问 DuplexChannelFactory。 通过显式 ChannelFactories 与隐式服务引用进行服务通信有什么好处?

这里的这个 SO 问题 (How to re-write WCF client to use ChannelFactory instead of service reference) 提到一家公司选择 ChannelFactories 而不是服务引用,但没有提到原因。

When to use ChannelFactories over service references

始终使用 ChannelFactory,除非没有其他选择。我不能足够强烈地说明这一点。服务参考是

  • 复杂,
  • 不可预测,
  • 间接,并且
  • 经常do not work,尤其是更新的时候。

您可能想要使用服务参考的唯一原因:

  1. 您没有二进制访问代码中的服务定义和合同类型。例如,您正在通过 Internet 调用 public 服务,而该服务的开发人员不可能将它们提供给您。
  2. 就是这样。这是唯一的原因。

如果您有权访问服务定义和合同类型,可能有人会争辩说您应该使用服务引用,但它们是在一些 uber-assembly 内部定义的,还有一大堆其他您没有用的东西为了。但是,我觉得这有问题,因为在这种情况下,您可以 re-create 服务定义和类型,并利用 WCF 对合同等效性的尊重。