读书笔记(二)对象激活和上下文

任何程序都需要在某个平台提供的环境中执行.对于传统的炒作系统而言,这种运行时环境的主要形式就是一个进程.一个进程不仅为你的代码提供了象虚拟内存,线程和内核对象这样的资源,还为你和别人的代码间提供了一个隔离边界.这种隔离不仅带来了某种程度上的保护,这样你的代码不会受到别人错误代码的影响还给你的程序提供一种独有的特性,比如可以单独的做安全配置,或者当前目录路径.

代码隔离在进程之间和进程内部都是游泳的.COM,COM+和公用语言运行时CLR都已经建立了这种模型以在进程内部内部提供细颗粒的代码隔离.在COM+和CLR中,这种细颗粒的隔离单元被称为上下文(context).

COM+上下文是COM单元的一部分,而COM单元本身是用于对线程对象分组的进程的一部分.CLR上下文是CLR应用程序的一部分,而CLR应用程序域本身是用于对共享相同安全和版本策略的对象分组的进程的一部分.上下文是COM+和.NET企业服务的编程模型的核心.每个被配置在COM+目录中的组件都会被自动的关联一个上下文.这种上下文使得系统拦截成为可能.

在COM+里配置的那些对象总是在一个上下文内运行.对象所需要的上下文由服务组件类上设定的上下文特性所定义.这些上下文特性定义了一个组件对于运行环境的需求.如果这里对象的调用这已经运行于一个上下文中.(因为它也是一个已配置的组件),则会检查这个上下文时候和这里对象所需要的相兼容.如果是,则这个对象将在调用者所在的上下文中运行.

如果这个上下文和这个对象所定西的不兼容,则将建立一个新的上下文.CLR和COM+都依赖于代理以保证对象间的上下文边界.代理(proxy)是处于不同的上下文中的真实对象的一个替身对象,代理负责在一二方法调用转换上下文.

既然上下文是根据一组用于声明对象所需要运行环境的属性来规定的,为一个对象定义一个上下文意味着这个对象支农从这个上下文内部直接访问.如果访问该对象的调用者所在上下文有所不同的化,则它不能直接调用该对象上的方法.而要通过一个代理.

(简单对象和上下文无关.普通的.NET对象都是简单对象,COM 对象总是绑定到一个上下文)

简单对象(Agile Object)

绑定了上下文的对象(Context Bound Object/CBO)

在.NET用于实现夸上下文通信的技术是.NET Remoting.所以CBO类和SynchroizationAttribute(继承自ContextAttribute类)被放在System.Runtime.Remoting.Context命名空间下.

.NET的安全边界:应用户程序域,一个进程可以包含多个应用程序域,来自一个域的对象不能和其他域的对象直接互相操作,互相操作用的是应用程序域信道.

 1using System;
 2using System.Threading;
 3using System.Runtime.Remoting.Contexts;
 4
 5[Synchronization]
 6class A:ContextBoundObject
 7{
 8    public void Method1() {
 9        string threadName = Thread.CurrentThread.Name;
10        Console.WriteLine(threadName + ": Method1 started");
11        Thread.Sleep(3000);
12        Console.WriteLine(threadName + ": Method1 finished");
13    }
14}
15
16class Test
17{
18    A obj = new A();
19
20    public void ThreadMethod()
21    {
22        obj.Method1();
23    }
24
25    static void Main(string[] args)
26    {
27        Test test = new Test();
28
29        //create and start a thread
30        Thread t1 = new Thread(new ThreadStart(test.ThreadMethod));
31        t1.Name = "Thread 2";
32        t1.Start();
33
34        //invoke Method1 with the main thread
35        Thread.CurrentThread.Name = "Thread 1";
36        test.obj.Method1();
37        t1.Join();
38    }
39}

 

      所有服务组件的基类都是在System.EnterpriseService命名空间下的ServicedComponent类.这个类继承于System.ContextBoundObject类,所有服务组件都有一个.NET Remoting上下文.

      当一个.NET服务组件被创建时,此时不仅建立了.NET上下文,还建立了一个连接到.NET上下文的COM+上下文.

时间: 2024-11-05 12:12:47

读书笔记(二)对象激活和上下文的相关文章

《淘宝技术这十年》读书笔记 (二).Java时代的脱胎换骨和坚若磐石

        马云说过"一个好的东西往往是是说不清楚的",姑且不论这句话的对与错.但我真的很佩服<淘宝技术这十年>这本书的作者子柳,能够通过淘宝的一些故事,按照时间顺序和IT发展的各种技术描述清楚,而且过程中读起来非常有意思.         该读书笔记中参杂了很多原文的知识,因为我实在无法割舍,都挺有意思的:同时记录一些有用的知识,通过这本书能介绍些学过的知识或面试中可能出现的题目及作者所思,文章还是非常有趣的,希望对大家有所帮助! 一. Java时代 脱胎换骨    

asp.net 2.0揭秘读书笔记二:使用Rich控件

Rich控件主要包括: (1)FileUpload控件 (2)Calender控件 (3)Adrotator控件 (4)Multiview控件 (5)Wizard控件 本笔记主要讲了FileUpload控件的简单用法. 1. FileUpload控件用于用户向web应用程序上传文件. (1)把文件保存到文件系统 在FileUpload控件浏览选择好本地要上传的文件后,点击确定按钮进行上传,代码如下所示: protected void Button1_Click(object sender, Ev

Programming Ruby读书笔记(二)

1.再谈ruby数组. class Test a = [1, 3, 5, 7, 9] puts a[0] #----->1 puts a[-2] #----->7 puts a[1, 3] #----->[3, 5, 7] puts a[-3, 2] #----->[5, 7] puts a[1..3] #----->[3, 5, 7] puts a[1...3] #----->[3, 5] a[2] = 'cat' #----->[1, 3, "cat

《C++ primer plus》读书笔记(二)_C 语言

第五章 1.for循环--for(initialization; test-expression; update-expression) body // test-expression 会被转换为bool,0为false,非零为true 2.表达式--表达式是值或值与运算符的组合.赋值表达式的值为其左侧成员的值,而赋值运算符是从右到左结合的. 3.a++和++a-- (1)对于内置类型,两种执行效率相同. (2)若重载运算符,对于类而言,前缀将值加1,返回结果:后缀会复制一个副本,加1后返回副本

More Effective C++ 读书笔记二

条款4:非必要不提供default constructor 这里主要是列举下默认构造函数的优点和缺点. 如果没有默认构造函数,定义对象数组会比较麻烦,因为对象数组初始化的时候没法传递非默认构造函数的值,如果要使用,书中提到的方法是给数组每个变量初始化的时候调用构造函数,另一个就是使用指针数组. 第一个的缺点很明显,没法声明类似A a[10];这样的数组,在堆上申请,还得用到placement new这个之前没讲过的东西,另外还得一个个去初始化:后者的缺点当然是,数组里面的每个指针都需要记得去de

锋利的jQuery--jQuery事件,动画(读书笔记二)

1.注意$(document).ready()方法和window.onload方法之间的细微区别 $(document).ready()在DOM树构建完成就会执行,而window.onload是在DOM树构建完成后且相关的文件下载完毕后才会执行. 例如:一个图库页面,且给页面上图片绑定了事件 $(document).ready()就会在图库页面的DOM结构完成就会执行,但这时候页面上面图片还没下载完毕,给图片绑定的事件也就不能起作用.这时候如果要获取图片的宽高就会失败.   为了解决这个问题:可

《FilthyRichClients》读书笔记(二)-让Swing正确显示Gif

利用gif图片制作简单动画是常用的渲染手段,swing虽然支持gif图片格式并可以自动地实现动画效果. 通常最简单地将gif图片放到swing组件上是调用JButton或JLabel的setIcon(Icon icon)方法. 还有一种方法是重写paintComponent(Graphics g)或paint(Graphics g)方法.例如 public class ShowGifPanel extends JPanel{ ImageIcon image = new ImageIcon("/r

《淘宝技术这十年》读书笔记 (三). 创造技术TFS和Tair

        前面两篇文章介绍了淘宝的发展历程和Java时代的变迁:             <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源             <淘宝技术这十年>读书笔记 (二).Java时代的脱胎换骨和坚若磐石         马云说过"创新不是为了与对手竞争,而是跟明天竞争",所以这篇文章讲述淘宝的创新技术TFS和Tair及创新的产品.         该篇文章不仅仅对在读大学生非常有所帮助,因为你能从文章中看到很多你需要学

《淘宝技术这十年》读书笔记 (四). 分布式时代和中间件

        前面两篇文章介绍了淘宝的发展历程.Java时代的变迁和淘宝开始创新技术:            <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源            <淘宝技术这十年>读书笔记 (二).Java时代的脱胎换骨和坚若磐石            <淘宝技术这十年>读书笔记 (三).创造技术TFS和Tair        这篇文章主要讲述分布式时代和中间件相关知识,包括服务化.HSF.Notify和TDDL.同时里面有我们经常遇见的编