.Net上下文Context 学习记录
1.上下文的概念
应用程序域是进程中承载程序集的逻辑分区,在应用程序域当中,存在更细粒度的用于承载.NET对象的实体,那就.NET上下文Context。
所有的.NET对象都存在于上下文当中,每个AppDomain(应用程序域)当中至少存在一个默认上下文(context 0)。
一般不需要指定特定上下文的对象被称为上下文灵活对象(context-agile),建立此对象不需要特定的操作,只需要由CLR自行管理,一般这些对象都会被建立在默认上下文当中。
2 透明代理
在上下文的接口当中存在着一个消息接收器负责检测拦截和处理信息,当对象是MarshalByRefObject的子类的时候,CLR将会建立透明代理,实现对象与消息之间的转换。
应用程序域是CLR中资源的边界,一般情况下,应用程序域中的对象不能被外界的对象所访问。而MarshalByRefObject 的功能就是允许在支持远程处理的应用程序中跨应用程序域边界访问对象,在使用.NET Remoting远程对象开发时经常使用到的一个父类。一般类所建立的对象为上下文灵活对象(context-agile),它们都由CLR自动管理,可存在于任意的上下文当中。而 ContextBoundObject(MarshalByRefObject的子类) 的子类所建立的对象只能在建立它的对应上下文中正常运行,此状态被称为上下文绑定。其他对象想要访问ContextBoundObject 的子类对象时,都只能通过代透明理来操作。
3 上下文绑定
ContextBoundObject(MarshalByRefObject的子类) 的子类所建立的对象只能在建立它的对应上下文中正常运行,此状态被称为上下文绑定。
4.与上下文有关的两个类
ContextBoundObject类
任何一个需要应用上下文同步机制类的父类,继承自此类的子类实例称为上下文绑定对象,而通常的类实例称为上下文灵活对象。上下文绑定的对象永远在其上下文中执行。
ContextAttribute类
MSDN定义:ContextAttribute 类是所有上下文属性的根。简单 Context 类属性 (Property) 可以用 ContextAttribute 类中的上下文属性 (Attribute) 和上下文属性 (Property) 从该类中派生。对于更为专用或更复杂的需要,上下文属性 (Attribute) 可以从 ContextAttribute 派生,并且上下文属性 (Property) 可以拆分为一个独立的类。
5.在.NET 中,跨上下文的访问调用链
通常的情况是 客户端 ->透明代理 ->真实代理 ->客户端接收器 ->信道 ->服务器端接收器->堆栈构造 ->面向上下文对象。(上面的调用链并不完整!)
参考:
http://blog.csdn.net/shyc1922/article/details/6876412