科技行者

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

知识库

知识库 安全导航

至顶网软件频道基础软件ASP.NET程序员应用程序域须知

ASP.NET程序员应用程序域须知

  • 扫一扫
    分享文章到微信

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

本文将讨论.NET的应用程序域,并且它们是如何对ASP.NET的执行和调度产生影响的

作者:编译:子夜 来源:天极网 2007年11月7日

关键字: ASP.NET 程序员 应用程序域 Windows

  • 评论
  • 分享微博
  • 分享邮件
本文将讨论.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验证所有代码。

  隐藏备份并且重新启动

  一旦一个集合加载到一个AppDomain,没有办法从AppDomain集合的办法。不过,从一个进程中移除一个AppDomain是有可能的。

  如果将一个已更新的dll复制到一个应用程序的子目录中,从ASP.NET的运行时间知道有新代码要执行。既然ASP.NET不能将dll复制到已存在的AppDomain中,它就会起动一个新AppDomain。旧的应用程序域是“排水已停止”,那就是,存在的需要被允许完成执行并且一旦它们执行完成AppDomain可以卸载。带有新代码的新的AppDomain就会开始并且开始所有的新请求。

  典型地说,当一个dll加载进一个进程时,进程对dll加锁并且不能对磁盘的上的文件进行覆盖。不过,AppDomain有一个众所周知的特点:隐藏复制那所有的允许保留在磁盘上的那些未被加锁的可替换的集合。

  运行时间对二进制子目录的带有Shadow Copy的ASP.NET进行初始化。AppDomain将任何的加锁之前的dll从二进制子目录中拷贝到一个临时位置并且再将这些dll加载到内存。Shadow Copy允许没有将网页在线的情况下对所有在二进制子目录中的任何dll进行重写。

  熟练掌握Domain

  应用程序域替换OS进程将为单独的.NET结点单元。一个可理解的应用程序域将会给你一个在ASP.NET应用程序后的手工发生的概念。使用AppDomain类的CurrentDomain属性,可以检查关于代码正在运行的AppDomain的属性,包括我们在此文章中讨论的Shadow Copy。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣椤愪粙鏌ㄩ悢鍝勑㈤柣顓燁殜楠炴牕菐椤掆偓婵¤偐绱掗幇顓ф疁闁哄矉绻濆畷鍫曞煛娴i攱鐫忛梻浣告惈椤戝懘鏌婇敐澶婅摕闁哄浄绱曢悿鈧柣搴秵娴滅偞绂掗悙顒傜瘈婵炲牆鐏濋悘鐘绘煏閸喐鍊愮€殿喖顭峰鎾晬閸曨厽婢戦梺璇插嚱缂嶅棙绂嶉弽顓炵;闁规崘顕ч崘鈧銈嗘尪閸斿海绮欒箛娑欌拺閻犳亽鍔屽▍鎰版煙閸戙倖瀚�

    濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴濐潟閳ь剙鍊圭粋鎺斺偓锝庝簽閸旓箑顪冮妶鍡楀潑闁稿鎹囬弻娑㈡偄闁垮浠撮梺绯曟杹閸嬫挸顪冮妶鍡楀潑闁稿鎸剧槐鎾愁吋閸滃啳鍚Δ鐘靛仜閸燁偉鐏掗柣鐘叉穿鐏忔瑧绮i悙鐑樷拺鐟滅増甯掓禍浼存煕閹惧娲撮柟顔藉劤鐓ゆい蹇撴噳閹锋椽姊婚崒姘卞闁告娲熷畷濂稿Ψ閵壯勭叄婵犵數濮撮敃銈団偓姘煎弮瀹曪綀绠涢弮鍌滅槇婵犵數濮撮崐缁樻櫠濞戙垺鐓曢悗锝冨妼婵′粙鏌曢崶褍顏€殿喕绮欐俊姝岊槹闁逞屽墯鐢繝寮婚悢鍏煎癄濠㈣泛锕ュ▓濠氭⒑閸濆嫮鐏遍柛鐘崇墵楠炲啫饪伴崼婵堝幐闂佺ǹ鏈粙鎾广亹鐎n喗鐓熼幖娣€ゅḿ鎰箾閸欏顏堟偩濠靛牏鐭欓悹鎭掑妽濞堥箖姊洪崜鎻掍簼婵炲弶鐗犻幃鈥斥槈閵忥紕鍘遍柣蹇曞仜婢т粙鎯岀€n偆绠鹃柛顐ゅ枑閸婃劖鎱ㄦ繝鍕笡闁瑰嘲鎳愮划鐢碘偓锝庝簼閻d即姊绘担瑙勫仩闁告柨顑夊畷锟犲礃閼碱剚娈鹃梺闈涚箞閸婃洟宕橀埀顒€顪冮妶鍡楀闁稿骸宕惃顒勬⒒閸屾瑧鍔嶉悗绗涘懐鐭欓柟瀵稿Л閸嬫挸顫濋悡搴$睄閻庤娲戦崡鍐茬暦閸楃倣鐔兼⒐閹邦喚娉块梻鍌欑窔濞佳囨偋閸℃稑绠犻幖娣灪閸欏繑銇勯幒鍡椾壕闂佸疇顫夐崹鍧楀春閵夆晛骞㈡俊鐐插⒔閸戣绻濋悽闈浶為柛銊︽そ閺佸鏌ч懡銈呬沪濞e洤锕俊鍫曞川椤斿吋顏¢梻浣呵归鍛村磹閸︻厽宕叉繛鎴欏灩楠炪垺淇婇婵愬殭缁炬澘绉归弻锝嗘償閵忥絽顥濆銈忓閺佽顕g拠宸悑闁割偒鍋呴鍥⒒娴e憡鍟為柟鎼佺畺瀹曠増鎯旈…鎴炴櫔闂佹寧绻傞ˇ浠嬪极閸℃ぜ鈧帒顫濋濠傚闂佹椿鍘介〃鍡欐崲濞戙垹绠婚柡澶嬪灩閸斾即姊虹粙娆惧剱闁圭懓娲濠氭晲閸涱亝顫嶅┑鐐叉閸旀洜澹曢幎鑺モ拺闁告繂瀚﹢鎵磼鐎n偄鐏撮柛鈺冨仱楠炲鏁冮埀顒€顔忓┑鍥ヤ簻闁哄洨鍋為崳娲煃鐠囪鍔熺紒杈ㄦ崌瀹曟帒鈻庨幋婵嗩瀴婵$偑鍊戦崝宀勫箠濮椻偓楠炲棗鐣濋崟顐わ紲闂佺粯鍔欏ḿ褏绮婇敃鍌涚厵闁稿繗鍋愰弳姗€鏌涢弬璺ㄧ劯闁诡喚鍋ゅ畷褰掝敃閻樿京鐩庨梻浣告贡閸庛倝宕归悽鍓叉晜闁冲搫鎳忛崐鍨叏濮楀棗澧绘俊鎻掔秺閺屾洟宕惰椤忣厾鈧鍠曠划娆愪繆濮濆矈妲奸梺闈╃祷閸庡磭妲愰幘瀛樺缂佹稑顑呭▓顓炩攽閳藉棗浜濈紒璇茬墕椤曪絾绻濆顓炰簻缂佺偓濯芥ご鎼佸疾閿濆鍋℃繝濠傚暟鏁堥梺璇″枟閿曘垽骞婇悩娲绘晢闁稿本绮g槐鏌ユ⒑閸濆嫷妲搁柣妤€瀚板畷婵囨償閿濆洣绗夐梺缁樺姉閸庛倝鎮″☉銏″€堕柣鎰硾琚氶梺鍝ュУ閿曘垽寮婚埄鍐╁闁荤喐婢橀~鎺楁倵鐟欏嫭绀堥柛鐘崇墵閵嗕礁顫滈埀顒勫箖閳哄懏鎯炴い鎰╁€濋幏濠氭⒒閸屾艾鈧嘲霉閸パ呮殾闁割煈鍋呴崣蹇涙煙閹澘袚闁抽攱姊婚埀顒€绠嶉崕閬嵥囬鐐插瀭闁稿瞼鍋為悡銏′繆椤栨粌鐨戠紒杈ㄥ哺閺屻劌鈹戦崱鈺傂︾紓浣插亾閻庯綆鍋佹禍婊堟煛瀹ュ啫濡块柍钘夘槹缁绘盯宕奸悢铏圭厜濠殿喖锕ㄥ▍锝呪槈閻㈢ǹ宸濇い鏂惧嫎閳ь剚鍔曢—鍐Χ鎼粹€茬凹濠电偠灏欓崰鏍х暦濞差亜鐒垫い鎺嶉檷娴滄粓鏌熼崫鍕棞濞存粓绠栧娲箰鎼淬垻鈹涙繝纰樷偓铏悙閸楅亶鏌熼悧鍫熺凡缂侇偄绉归弻娑㈩敃閿濆洨鐣煎銈嗘尰濡炶棄顫忛搹鍦<婵☆垰鎼~宀勬倵濞堝灝娅橀柛鎾寸懆閻忓啴姊洪崨濠佺繁闁哥姵宀稿畷銏ゅ箹娴e厜鎷洪梺鍛婃尰瑜板啯绂嶆禒瀣厱閻庯綆浜滈顓㈡煙椤旀枻鑰块柡浣稿暣瀹曟帒鈽夊顒€绠為梻浣筋嚙閸戠晫绱為崱娑樼;闁糕剝蓱濞呯姵銇勯幒鎴濃偓鑽ゅ婵傚憡鐓曢悘鐐插⒔閳藉绱掑锕€娲﹂悡娆撴煟閻斿憡绶叉い蹇e弮閺岀喖鎮℃惔銏g闂佺懓寮堕幐鍐茬暦閻斿吋顥堟繛鎴炵懄閻濓繝姊婚崒姘偓鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偞鐗犻、鏇㈠Χ閸屾矮澹曞┑顔矫畷顒勫储鐎电硶鍋撶憴鍕缂傚秴锕濠氬幢濡ゅ﹤鎮戦梺鍛婁緱閸ㄧ晫妲愰柆宥嗙厽閹艰揪绱曢悾顓㈡煕鎼淬劋鎲鹃挊婵喢归崗鍏肩稇缁炬崘娉曢埀顒€绠嶉崕閬嵥囨导瀛樺亗闁哄洢鍨洪悡娑㈡煕閵夛絽鍔氬┑锛勫帶椤儻顧侀柛銊ゅ嵆濠€渚€姊虹紒妯撳湱绮旈鈧、鏃堝醇閻旇櫣鏆㈤梻鍌氬€烽悞锔锯偓绗涘懏宕查柛灞绢嚤濞戞鏃堝川椤撶姴骞掗梻浣告惈濞层垽宕瑰ú顏呭亗闁告劦浜濋崰鎰節婵犲倻澧曠紒鈧崼鐔稿弿婵☆垱瀵х涵楣冩煢閸愵亜鏋涢柡灞炬礃缁绘稖顦查悗姘卞厴瀹曟垿濡搁埡鍌楁嫼缂傚倷鐒﹂敋濠殿喖娲﹂妵鍕即閵娿儱绫嶉梺绯曟杺閸ㄨ棄顕i幘顔碱潊闁炽儲鏋奸崑鎾绘偨閸涘﹦鍙嗗┑鐘绘涧濡鍩€椤掑倹鍤€闁宠绉瑰畷鍫曞Ω閿濆嫮鐩庨梻濠庡亜濞诧妇绮欓幇鏉跨疅濡わ絽鍟悡娑㈡倶閻愰潧浜剧紒鈧€n兘鍋撶憴鍕濞存粌鐖奸妴浣割潨閳ь剟骞冮姀锛勯檮濠㈣泛顦辨径锟�

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