2011-05-25 27 views
1

在过去的2年中,我一直在使用WCF在TCP/IP协议的通信层上开发c#3.5中的分布式应用程序;到目前为止,我一直使用集成的Add Service Reference ...来在客户端生成服务代理,但我也知道使用通道工厂创建通信通道(从而访问服务契约方法)是一种可行的方法。WCF自动生成的代理与自定义代理:要走哪条路,何时以及为什么?

的问题是非常简单(请论点的答案):

  • 哪些利弊两种方法的缺点&?
  • 在大多数情况下,“自动”生成方法应该是首选,如果是这样,为什么?
  • 在什么情况下(如果有的话)是“自定义”方法是否合理/需要?

(请告诉我,如果需要更多的情境来回答)

回答

1

对我来说,一个理由使用自定义代理是能够使用相同的接口【类型】和域类型都在客户端上和服务器。自动生成会创建相当多的类,这将不可避免地增加程序集的大小,因此如果您正在构建一个Silverlight应用程序,其中下载时间很关键,或者如果您有一个很大的内存限制,渠道工厂可能就是要走的路。

我也喜欢channel factory的DRY-ness,因为我通常都有我的域对象,为什么要再次生成它们?特别是如果我有一堆buisness逻辑在他们。当然,这实际上只适用于wcf-to-wcf通信,如果你正在与其他服务通话,你想要生成域对象

(我也在这里假设域类型和接口在自己的程序集中,与实际的后端持久代码分开)