我正在学习WCF教程,发现这些教程让我可以使用mex端点来隐式地向客户端添加服务引用。我想这允许VS在使用生成的WSDL文件时创建代理类?
然而,我试图熟悉的代码库并没有使用隐式服务引用。相反,客户端可以访问DuplexChannelFactory通过显式ChannelFactories与隐式服务引用进行服务通信的好处是什么
这里的这个SO问题(如何重写WCF客户端以使用ChannelFactory而不是服务引用)提到了一家公司选择ChannelFactories而不是服务参考,但没有提到原因。
何时通过服务引用使用ChannelFactories
除非没有其他选项,否则始终使用ChannelFactory。我再怎么强调也不为过。服务参考是
- 复合体
- 不可预测
- 间接的,以及
- 通常不起作用,尤其是在更新时
您可能想要使用服务引用的唯一原因:
- 您不能以二进制方式访问代码中的服务定义和约定类型。例如,你在互联网上呼叫一项公共服务,而该服务的开发者不可能将其提供给你
- 就是这样,这是唯一的原因
如果您有权访问服务定义和契约类型,则可以认为您应该使用服务引用,但它们是在某个uber程序集中定义的,还有一大堆其他您不使用的东西。然而,我发现这是有问题的,因为在这种情况下,您可以重新创建服务定义和类型,并利用WCF对合同等价性的尊重。