我在网上读了很多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框架为您处理了所有这些。
发布于 2011-05-31 21:39:17
2主要原因:
这里有一个好文章,它将进一步详细介绍。
https://stackoverflow.com/questions/6193823
复制相似问题