熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET程序員應用程序域須知

2013-11-13 09:42:37  來源: .NET編程 

  本文將討論NET的應用程序域並且它們是如何對ASPNET的執行和調度產生影響的
  
  當在Windows中啟動Notepad程序時眾所周知程序會執行一個包含在容器內的進程可以啟動多個Notepad的實例並且每個實例都會在一個專注的進行程運行使用任務管理器可以看到在系統中當前運行的所有進程的清單
  
  一個進程包括可執行從操作系統中保留的在內存中的代碼和程序數據在進程之內只少有一個包含在進程之內的正在執行指令的線程並且在多數情況下有多個線程如果程序打開了任何文件或者資源這些資源將屬於這個進程
  
  一個進程也有一個分界線包含在進程之內的錯誤代碼不能在當前進程之外的地區腐化在一個進程之內很容易通訊但是專業技術要求一個進程對另一個進程通訊是必需的每一個進程也在一個特殊的上下文安全系統中運行這個安全系統規定在機器和網絡中進程做什麼
  
  一個進程是一個在Windows 操作系統中獨立運行的最小單位這會給在一個單一服務器上對一大堆應用程序的ISP提出一個問題ISP將會分離每一個在同一個服務器上的與另一個公司的應用程序干擾的ASPNET應用程序但是相關的發射和執行一個對成百上千的應用程序的過程成本禁止的
  
  介紹應用程序域
  
  NET介紹一個應用程序域的概念或者AppDomain像一個過程AppDomain是既是容器又是邊界線NET運行時間使用AppDomain作為代碼和數據的容器就像操作系統一個過程作為代碼和數據的容器一樣當操作系統使用一個過程來分離不整齊的代碼時NET運行時間使用一個AppDomain來分離在一個安全邊線內的代碼
  
  一個AppDomain僅僅屬於一個單過程但是單個過程能夠保持多重的AppDomain一個Appdomain創建起來相對容易(與一個過程比較起來)並且與一個過程比較起來具有少的維護費用由於這些原因一個AppDomain是ISP(提供成千上萬的應用程序)的很好的解決方案每一個應用程序可以生存在一個獨立的AppDomain之內並且許多這樣的AppDomain可以生存於一個單一的過程(節省費用)之內
  
  AppDomain
  
  在同服務器上創建了兩個ASPNET應用程序並且沒有任何特殊配置會發生什麼事情呢?
  
  一個單一的ASPNET手工進程使ASPNET應用程序變成兩方面的主要程序在Windows XP和Windows 這一程序被命名為aspnet_wpexe並且這一程序運行在本地的ASPNET計數器的前後安全關系中在Windows 手工程序擁有wwpexe並且默認運行在NETWOR SERVICE中
  
  一個對旬可以進住在一個AppDomain中每一個ASPNET應用程序將具有它自己的一套全局變量CacheApplication進住進同一進程NET AppDomain是一個獨立的單元如果存有共享的或靜態成員的類並且那些類存在於兩種應用程序之內每一個AppDomain擁有它自己的靜態字段的備份—數據並不共享每一個應用程序的數據和代碼安全獨立存在並且在一邊界之內由AppDomain提供
  
  為了在AppDomain之間通訊或者在AppDomain之間交換對象需要查看在NET中穿過邊界的通訊技術例如NET細微的或Web 服務
  
  對將AppDomain作為邊界思想的警告之一是ASPNET應用程序在默認情況下會帶著充分的信任運行充分信任的代碼可以執行本地代碼並且本地代碼可以本質地在進程之內的任何內容需要運行帶著部分信任執行應用程序來約束存取不完整的代碼並且對安全的AppDomain驗證所有代碼
  
  隱藏備份並且重新啟動
  
  一旦一個集合加載到一個AppDomain沒有辦法從AppDomain集合的辦法不過從一個進程中移除一個AppDomain是有可能的
  
  如果將一個已更新的dll復制到一個應用程序的子目錄中從ASPNET的運行時間知道有新代碼要執行既然ASPNET不能將dll復制到已存在的AppDomain中它就會起動一個新AppDomain舊的應用程序域是排水已停止那就是存在的需要被允許完成執行並且一旦它們執行完成AppDomain可以卸載帶有新代碼的新的AppDomain就會開始並且開始所有的新請求
  
  典型地說當一個dll加載進一個進程時進程對dll加鎖並且不能對磁盤的上的文件進行覆蓋不過AppDomain有一個眾所周知的特點隱藏復制那所有的允許保留在磁盤上的那些未被加鎖的可替換的集合
  
  運行時間對二進制子目錄的帶有Shadow Copy的ASPNET進行初始化AppDomain將任何的加鎖之前的dll從二進制子目錄中拷貝到一個臨時位置並且再將這些dll加載到內存Shadow Copy允許沒有將網頁在線的情況下對所有在二進制子目錄中的任何dll進行重寫
  
  熟練掌握Domain
  
  應用程序域替換OS進程將為單獨的NET結點單元一個可理解的應用程序域將會給你一個在ASPNET應用程序後的手工發生的概念使用AppDomain類的CurrentDomain屬性可以檢查關於代碼正在運行的AppDomain的屬性包括我們在此文章中討論的Shadow Copy
From:http://tw.wingwit.com/Article/program/net/201311/11383.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.