科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件如何用AppDomains提高ASP.NET应用程序稳定性

如何用AppDomains提高ASP.NET应用程序稳定性

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

应用域也称作AppDomain,它为.NET应用程序提供一个沙盒。AppDomain是.NET运行时间所使用的代码和数据的一个容器或安全边界。

作者:builder.com.cn 2007年7月4日

关键字: Tony Patton ASP.NET AppDomains

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共19页)

最近一个同事和我提起ASP.NET中应用域(application domain)的概念,我用了一分钟时间才想起.NET Framework中的这个安全特性。如果你想重温一下应用域,下面我们来简单复习这个概念。

应用域介绍

应用域也称作AppDomain,它为.NET应用程序提供一个沙盒。AppDomain是.NET运行时间所使用的代码和数据的一个容器或安全边界。它类似于应用程序和它的数据使用的操作系统进程。在AppDomain内,代码和数据被安全隔离。

AppDomain的目的在于将它里面的应用程序和其它应用域隔离开来。也就是说,应用程序得到保护,免于受到在不同应用域中运行的其它应用程序的影响。这样即可提供稳定性。

AppDomain的隔离功能通过保证一个应用程序只占用唯一的内存段,以及规定使用那个地址空间的进程或应用域的资源范围,从而得以实现。.NET运行时间通过控制内存使用来执行AppDomain隔离。应用域在一个单独的Win32进程中运行。所有AppDomain内存由这个运行时间管理,确保内存使用不会出现交迭。

似乎每一个应用程序都有一个AppDomain,但.NET通用语言运行时间(CLR)允许在单独一个AppDomain中运行几个应用程序。CLR还核实AppDomain中的用户代码是类型安全的。在执行前,必须往AppDomain中加载一个程序集(assembly)。默认情况下,CLR把一个程序集加载到包含引用它的代码的AppDomain中。

建立一个托管CLR的进程时,CLR自动建立一个默认的AppDomain。只要这个托管进程有效,这个默认的AppDomain就会存在。IIS是托管CLR的典型例子。

ASP.NET

当一个请求初次进入一个ASP.NET应用程序时,由IIS管理的引擎模块创建一个应用域;然后应用域对应用程序执行必要的处理任务,如验证。

在一台服务器上处理几个ASP.NET应用程序时,ASP.NET工作进程将托管所有应用程序,但每个程序有它自己的进程。这保证每个应用程序都受到保护,不会被另一个应用程序中的问题所影响。另外,每个应用程序有它自己的一组全局变量。即使两个应用程序的代码位于相同的进程中,隔离单元仍为.NET AppDomain。

有关ASP.NET和应用域的应用有一个有趣的警告,即ASP.NET应用程序默认情况下在完全信任权限下运行。以完全信任权限运行的应用程序可以执行本地代码,并避开.NET运行时间的所有安全检查,这使得应用域提供的安全边界形同虚设。但是,你可以忽略默认行为,以部分信任权限运行应用程序,从而避免这个问题。

很容易看到AppDomain概念带来的好处,因为应用程序之间不会彼此伤害。ASP.NET托管提供商要避免客户的应用程序相互影响,使用AppDomain概念的效果明显。此外,.NET Framework还可编程访问应用域概念。

编程访问

你可以在基本的System命名空间中找到AppDomain类。微软文件为使用AppDomain类提供以下指导:

  • 使用应用域隔离可能中断进程的任务。如果执行一项任务的AppDomain的状态变得不稳定,可以卸载AppDomain,而不会影响该进程。当一个进程不需重新启动,必须长期运行时,这显得非常重要。你还可以使用应用域隔离不应共享数据的任务。
  • 如果一个程序集被加载到默认的应用域中,进程运行时就它将无法从内存中卸载。但是,如果你打开另一个应用域加载并执行程序集,在那个应用域被卸载时,程序集也随之被卸载。使用这个技巧减少有时使用大型DLL的长期运行的进程的工作集。

AppDomain类允许你根据自己的需求创建和操作自己的应用域。你可以用CreateDomain方法建立一个新的应用域。下面的C#代码片断建立一个新的应用域,并在这个新应用域内执行程序集。

AppDomain domain = AppDomain.CreateDomain("TestAppDomain");

domain.ExecuteAssembly("AssemblyName.exe", null, args);

Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);

除建立一个新应用域外,AppDomain类还提供处理新建和现有应用域的方法和属性。

这个在线样本综合列表为你说明如何处理当前应用域及与其它应用域进行交互

保护

应用域是.NET平台的基本特性,因为它们将应用程序彼此隔离开来。这样可避免一个应用程序中的问题影响在相同平台上运行的其它应用程序。另外,AppDomain类允许你建立自己的应用域来隔离各种任务。

Tony Patton拥有丰富的Java、VB、Lotus及XML认证方面的知识,是一个专业的应用程序开发人员。

责任编辑:德东

查看本文国际来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章