首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么缓存WCF通道是一件坏事?

为什么缓存WCF通道是一件坏事?
EN

Stack Overflow用户
提问于 2011-05-31 21:32:55
回答 1查看 3.6K关注 0票数 11

我在网上读了很多WCF文章,似乎大多数人都在缓存ChannelFactory对象,而不是通道本身。看来,大多数人都害怕使用信道缓存,因为他们不想处理可能导致缓存的通道不可用的网络故障。但是,通过在方法上捕获CommunicationException、重新创建通道以及使用反射重放该方法,可以很容易地解决这个问题。

还有一些人认为做通道缓存是不好的,因为所有的通信都要经过一个通道。见以下文章。

http://social.msdn.microsoft.com/Forums/is/wcf/thread/9cbdf92a-a749-40ce-9ebe-3f2622cd78ee

这一定是件坏事吗?您不能跨线程共享通道吗?性能会因为对这个单通道进行的多个方法调用将被串行处理而受到影响吗?

我还没有找到证据表明共享渠道会降低性能。我确实发现,使用缓存的通道比使用非缓存的通道快5倍,即使这意味着必须使用反射来对缓存的通道进行方法调用。

另一个优点是,当您完成所有WCF调用时,不必将所有WCF调用都包含在try/catch/finally语句中才能调用Close()、Abort()或Dispose()。在我看来,WCF似乎走错了一步,迫使开发人员不得不管理WCF渠道资源。在.NET远程处理中,您使用Activator类创建了代理,您不必对它做任何事情来清理它。.NET框架为您处理了所有这些。

EN

回答 1

Stack Overflow用户

发布于 2011-05-31 21:39:17

2主要原因:

  1. ChannelFactory的创建成本很高,而且它是线程安全的=>缓存的完美候选。
  2. 由通道工厂生成的通道并不昂贵,但它并不是线程安全的(实际上它是线程安全的,但是并发调用将被阻塞并依次执行),=>不会在多线程环境中缓存它。

这里有一个好文章,它将进一步详细介绍。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6193823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档