摘自:承载和使用 WCF 服务 http://www.microsoft.com/china/MSDN/library/Windev/WindowsVista/bb332338.mspx?mfr=true
了解 .NET 应用程序域
如果您了解 Windows 进程的角色以及如何通过托管代码与它们交互,那么您肯定会对 .NET 应用程序域的概念有所了解。要在进程中运行托管 .NET 代码,就需要创建程序集。这些程序集并不直接承载于 Windows 进程中。而是由公共语言运行库 (CLR) 在进程中创建称为“应用程序域”的单独逻辑分区来对托管代码进行隔离。单个进程可能会包含多个应用程序域,每个域都会承载封装于程序集内的不同代码片断。这种对传统 Windows 进程的划分方式可以通过 .NET Framework 提供几个好处。
主要好处如下所示:
• 由于不涉及可执行文件或库的概念,应用程序域决定了 .NET 平台的与操作系统无关的特性。
• 您可以根据自身需要控制、卸载和加载应用程序域。
• 应用程序域在应用程序或多个应用程序域共生的进程中起到隔离的作用。进程中的应用程序域彼此相互独立,虽然一个域出现故障,但其他域仍可正常工作。
承载环境特征
.NET 应用程序需要一个作为宿主的 Windows 进程。该 Windows 进程内部可以承载多个 .NET 应用程序域。应用程序域是 .NET CLR 将托管代码与 Windows 进行隔离所采用的一种手段。CLR 会在每个工作进程中进行初始化,并自动创建一个默认的应用程序域。该默认应用程序域运行于某个进程,并直到该进程结束时才会卸载。默认应用程序域的关闭是由 CLR 来控制的。在大多数宿主中,默认应用程序域内部并不运行任何代码。而是由宿主(或“进程”)来新建应用程序域,以便应用程序域可以独立于进程而关闭。在很多应用程序中,理想的情况是客户端代码和服务器端代码分别在不同应用程序域中执行。通常这种要求是出于安全性和隔离等原因的考虑。