直接频道使用与使用代理?

MrL*_*ane 9 wcf proxy channel channelfactory

正如标题所暗示的那样,我试图理解为什么在WCF中有时人们选择"生成代理"而不是使用ChannelFactory来手动创建新的通道实例.我已经看过每个例子,但是没有真正找到任何解释为什么你会选择一个与另一个.

说实话,我只使用过频道和ChannelFactory<T>我继承的代码,即:

IChannelFactory<IDuplexSessionChannel> channelFactory =
    binding.BuildChannelFactory<IDuplexSessionChannel>();

_duplexSessionChannel = channelFactory.CreateChannel(endpointAddress);
Run Code Online (Sandbox Code Playgroud)

那我为什么要"生成代理"呢?有什么好处和缺点?

mar*_*c_s 17

主要区别在于:

  • 生成代理只需要知道服务所在的URL.通过生成代理,将通过检查服务的元数据来确定其他所有内容(服务合同和涉及的数据协定)

  • 要直接创建a ChannelFactory<T>,您必须直接访问包含T要为其生成通道工厂的服务合同的程序集.只有在基本上控制通道的两端并且您可以共享包含这些服务合同的程序集时,这才有效.通常,对于第三方服务,情况并非如此 - 使用您自己的服务,是的.

第二个重点是:

  • 创建一个生成的代理基本上完成了你要做的两个步骤ChannelFactory<T>- 在一个构造函数中创建一个,并从中创建实际的通道.您无法控制这两个步骤.

  • 做自己的频道创建是有益的,因为创建这ChannelFactory<T>是一个昂贵的步骤 - 所以你可以在某处缓存你的频道工厂实例.从工厂创建和重新创建实际通道的步骤更少,您可以更频繁地执行此操作

因此,如果您确实控制了通信,服务和客户端的两端,您可以选择在单独的程序集中共享服务合同,从而获得更多选项.

对于大多数第三方服务,您只是没有这个选项.