WCF中有很多比较高深的应用技巧是值得我们在学习和实践的过程中去深入研究的。那么,今天我们就先从WCF实例停用开始了解,从而使我们对这一开发工具有一个更加深入的了解程度。#t#
WCF实例停用只针对会话服务而言。单例服务虽然也可以应用,但却无效。
“会话实际要做的不仅是关联客户端消息,同时还要关联托管了服务的上下文。启动会话时,宿主会创建一个新的上下文。会话终止时,上下文也随之而终止。默认情况下,上下文的生命周期与发布的服务实例的生命周期相同。然而,出于优化的目的,WCF为服务设计者提供了一个分离两种生命周期的选项,该选项允许WCF独立地停用实例,而不必依赖于它的上下文。实际上,WCF还允许不包含实例的上下文存在。”
这种实例管理技术称为上下文停用(Context Deactivation)。控制上下文停用的最常见办法是通过OperationBehavior特性的ReleaseInstanceMode属性:
- public enum ReleaseInstanceMode
- {
- None, BeforeCall, AfterCall, BeforeAndAfterCall,
- }
- [AttributeUsage(AttributeTargets.Method)]
- public sealed class OperationBehaviorAttribute : Attribute,...
- {
- public ReleaseInstanceMode ReleaseInstanceMode
- {
- get;set;
- }
- //More members
- }
“通常,我们只需要将WCF实例停用应用到部分服务方法上,而不是全部方法;或者为不同的方法设置不同的值。”例如:
- class MyService : IMyContract,IDisposable
- {
- [OperationBehavior(ReleaseInstanceModeReleaseInstanceMode =
ReleaseInstanceMode.AfterCall)]- public void MyMethod( )
- {
- ...
- }
- public void MyOtherMethod( )
- {
- ...
- }
- public void Dispose( )
- {
- ...
- }
- }
以上就是对WCF实例停用的相关内容的介绍。