1

何时使用通道工厂,何时使用 WCF 中的服务代理?

我的绑定是 NetNamedPipeBinding。我打算使用双工连接。

4

2 回答 2

2

何时使用代理?

我们使用 svcutil.exe 创建代理。该工具的输出提供了一个代理类并对应用程序配置文件进行了相应的更改。如果您知道某个服务将被多个应用程序使用,或者其通用性足以在多个地方使用,那么您将希望继续使用生成的代理类。我们在 WCF 中使用代理来与客户端共享服务合同和实体。代理有几个限制,比如他们需要获取和设置,不能暴露构造函数,不能暴露服务契约以外的方法,重复代码,每次我们添加/修改服务契约/数据契约/消息契约时,我们需要为客户端重新生成代理。

何时使用 ChannelFactory

另一种选择是使用 ChannelFactory 类在客户端和服务之间构建一个通道,而不需要代理。在某些情况下,您可能拥有与客户端应用程序紧密绑定的服务。在这种情况下,直接引用接口 DLL 并使用 ChannelFactory 调用您的方法是有意义的。ChannelFactory 路由的一个显着优势是它使您可以访问如果您使用 svcutil.exe 则无法使用的方法。

何时使用 ChannelFactory 与 Proxy 类?

如果客户端代码在您的控制之下,并且您希望与客户端共享的不仅仅是服务合同——例如与实体关联的一些实用方法,并使客户端和服务代码更紧密地绑定,则 DLL 会很有帮助。如果您知道您的实体不会发生太大变化并且客户端代码更少,那么 DLL 将比代理更好地工作。如果您的服务的客户端在系统外部(例如 API),则使用代理是有意义的,因为通过提供代码文件而不是 DLL,它可以更轻松地共享合约。

在 NetNamedPipeBinding 的情况下

推荐使用 ChannelFactory 有以下两个原因:

  1. 易于使用。
  2. 避免代理层意味着额外的性能。
于 2013-04-11T13:31:02.427 回答
1

通道工厂和服务代理是实现一个目标的相同功能 - 消耗您的服务。通常,如果您在客户端和服务器上都控制服务合同接口,则最好使用 ChannelFactory,因为它更易于管理。如果您只管理客户端部分 - 代理是一种方法,因为否则您将无法控制在服务器端进行的更改。此外 Proxy 为您提供了一个为您的服务生成异步方法的好工具 :)

于 2013-04-11T13:06:33.053 回答