本文将讨论.NET的应用程序域,并且它们是如何对ASP.NET的执行和调度产生影响的。
当在Windows中启动Notepad程序时,众所周知程序会执行一个包含在容器内的进程。可以启动多个Notepad的实例,并且每个实例都会在一个专注的进行程运行。使用任务管理器,可以看到在系统中当前运行的所有进程的清单。
一个进程包括可执行从操作系统中保留的在内存中的代码和程序数据。在进程之内只少有一个包含在进程之内的正在执行指令的线程,并且在多数情况下有多个线程。如果程序打开了任何文件或者资源,这些资源将属于这个进程。
一个进程也有一个分界线。包含在进程之内的错误代码不能在当前进程之外的地区腐化。在一个进程之内很容易通讯,但是专业技术要求一个进程对另一个进程通讯是必需的。每一个进程也在一个特殊的上下文安全系统中运行,这个安全系统规定在机器和网络中进程做什么。
一个进程是一个在Windows 操作系统中独立运行的最小单位。这会给在一个单一服务器上对一大堆应用程序的ISP提出一个问题。ISP将会分离每一个在同一个服务器上的与另一个公司的应用程序干扰的ASP.NET应用程序。但是相关的发射和执行一个对成百上千的应用程序的过程成本禁止的。
介绍应用程序域
.NET介绍一个应用程序域的概念,或者AppDomain像一个过程,AppDomain是既是容器又是边界线。.NET运行时间使用AppDomain作为代码和数据的容器,就像操作系统一个过程作为代码和数据的容器一样。当操作系统使用一个过程来分离不整齐的代码时,.NET运行时间使用一个AppDomain来分离在一个安全边线内的代码。
一个AppDomain仅仅属于一个单过程,但是单个过程能够保持多重的AppDomain。一个Appdomain创建起来相对容易(与一个过程比较起来),并且与一个过程比较起来具有少的维护费用。由于这些原因,一个AppDomain是ISP(提供成千上万的应用程序)的很好的解决方案。每一个应用程序可以生存在一个独立的AppDomain之内,并且许多这样的AppDomain可以生存于一个单一的过程(节省费用)之内。
AppDomain
在同服务器上创建了两个ASP.NET应用程序,并且没有任何特殊配置。会发生什么事情呢?
一个单一的ASP.NET手工进程使ASP.NET应用程序变成两方面的主要程序。在Windows XP和Windows 2000中,这一程序被命名为aspnet_wp.exe,并且这一程序运行在本地的ASPNET计数器的前后安全关系中。在Windows 2003手工程序拥有w3wp.exe并且默认运行在NETWOR SERVICE中。
一个对旬可以进住在一个AppDomain中。每一个ASP.NET应用程序将具有它自己的一套全局变量:Cache,Application进住进同一进程,.NET AppDomain是一个独立的单元。如果存有共享的或静态成员的类,并且那些类存在于两种应用程序之内,每一个AppDomain拥有它自己的静态字段的备份—数据并不共享。每一个应用程序的数据和代码安全独立存在并且在一边界之内由AppDomain提供。
为了在AppDomain之间通讯或者在AppDomain之间交换对象,需要查看在.NET中穿过边界的通讯技术,例如.NET细微的或Web 服务。
对将AppDomain作为边界思想的警告之一是ASP.NET应用程序在默认情况下会带着充分的信任运行。充分信任的代码可以执行本地代码,并且本地代码可以本质地在进程之内的任何内容。需要运行带着部分信任执行应用程序来约束存取不完整的代码并且对安全的AppDomain验证所有代码。
本文Tags:C#
|