就像标题所说的那样,我很想知道WCF客户端代理对象中包含什么状态 - 我是否应该随意新增大量的这些并且不关心?或者他们是更重量级的我不应该如此骑士创造它们?
答案 0 :(得分:3)
并不是真的 - 通信渠道的链接,它的状态 - 就是它。 WCF往往是非常无状态的,所以你的客户端和服务器都不会真正挂起很多状态。
客户端代理生成的成本分为两部分:
首先,需要创建一个ChannelFactory<T>
(T
是您的服务合同,例如IMyService
)。这部分是相当重量级的,所以如果可以,请缓存渠道工厂
第二,频道工厂用于创建实际频道 - 这是一个非常简单的操作,你不应该费心去缓存它。
如果您在Visual Studio中使用了Add Service Reference
功能,或者在命令行中使用了svcutil.exe
,那么通常会得到一个(YourService)Client
类 - 这基本上封装了这两个步骤你。
如果您感觉有优化的冲动,请查看这个两步流程,看看您是否可以使它工作,如果缓存工厂(从而限制工厂实例化的数量)对您有所帮助。