通道工厂与服务代理

时间:2013-04-11 12:53:32

标签: performance wcf wcf-binding

何时使用Channel Factory,何时在WCF中使用服务代理?

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

2 个答案:

答案 0 :(得分:2)

何时使用代理?

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

何时使用ChannelFactory

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

何时使用ChannelFactory与Proxy类?

如果客户端代码在您的控制之下,并且您希望与客户端共享不仅仅是服务合同 - 例如与实体关联的一些实用程序方法,并使客户端和服务代码更紧密。如果您知道您的实体不会发生太大变化且客户端代码较少,那么DLL将比代理更好地工作。如果您的服务的客户端是系统外部的,例如API,那么使用代理是有意义的,因为它通过提供代码文件而不是DLL来使共享更容易。

如果是NetNamedPipeBinding

建议使用ChannelFactory有以下两个原因:

  1. 易于使用。
  2. 避免代理层意味着额外的性能。

答案 1 :(得分:1)

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