国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

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

2024-07-10 12:55:55
字體:
來源:轉載
供稿:網(wǎng)友

商業(yè)源碼熱門下載www.html.org.cn

本文將討論.net的應用程序域,并且它們是如何對asp.net的執(zhí)行和調(diào)度產(chǎn)生影響的。

  當在windows中啟動notepad程序時,眾所周知程序會執(zhí)行一個包含在容器內(nèi)的進程??梢詥佣鄠€notepad的實例,并且每個實例都會在一個專注的進行程運行。使用任務管理器,可以看到在系統(tǒng)中當前運行的所有進程的清單。

  一個進程包括可執(zhí)行從操作系統(tǒng)中保留的在內(nèi)存中的代碼和程序數(shù)據(jù)。在進程之內(nèi)只少有一個包含在進程之內(nèi)的正在執(zhí)行指令的線程,并且在多數(shù)情況下有多個線程。如果程序打開了任何文件或者資源,這些資源將屬于這個進程。

  一個進程也有一個分界線。包含在進程之內(nèi)的錯誤代碼不能在當前進程之外的地區(qū)腐化。在一個進程之內(nèi)很容易通訊,但是專業(yè)技術要求一個進程對另一個進程通訊是必需的。每一個進程也在一個特殊的上下文安全系統(tǒng)中運行,這個安全系統(tǒng)規(guī)定在機器和網(wǎng)絡中進程做什么。

  一個進程是一個在windows 操作系統(tǒng)中獨立運行的最小單位。這會給在一個單一服務器上對一大堆應用程序的isp提出一個問題。isp將會分離每一個在同一個服務器上的與另一個公司的應用程序干擾的asp.net應用程序。但是相關的發(fā)射和執(zhí)行一個對成百上千的應用程序的過程成本禁止的。

  介紹應用程序域

  .net介紹一個應用程序域的概念,或者appdomain像一個過程,appdomain是既是容器又是邊界線。.net運行時間使用appdomain作為代碼和數(shù)據(jù)的容器,就像操作系統(tǒng)一個過程作為代碼和數(shù)據(jù)的容器一樣。當操作系統(tǒng)使用一個過程來分離不整齊的代碼時,.net運行時間使用一個appdomain來分離在一個安全邊線內(nèi)的代碼。

  一個appdomain僅僅屬于一個單過程,但是單個過程能夠保持多重的appdomain。一個appdomain創(chuàng)建起來相對容易(與一個過程比較起來),并且與一個過程比較起來具有少的維護費用。由于這些原因,一個appdomain是isp(提供成千上萬的應用程序)的很好的解決方案。每一個應用程序可以生存在一個獨立的appdomain之內(nèi),并且許多這樣的appdomain可以生存于一個單一的過程(節(jié)省費用)之內(nèi)。

  appdomain

  在同服務器上創(chuàng)建了兩個asp.net應用程序,并且沒有任何特殊配置。會發(fā)生什么事情呢?

  一個單一的asp.net手工進程使asp.net應用程序變成兩方面的主要程序。在windows xp和windows 2000中,這一程序被命名為aspnet_wp.exe,并且這一程序運行在本地的aspnet計數(shù)器的前后安全關系中。在windows 2003手工程序擁有w3wp.exe并且默認運行在networ service中。

  一個對旬可以進住在一個appdomain中。每一個asp.net應用程序?qū)⒕哂兴约旱囊惶兹肿兞浚篶ache,application進住進同一進程,.net appdomain是一個獨立的單元。如果存有共享的或靜態(tài)成員的類,并且那些類存在于兩種應用程序之內(nèi),每一個appdomain擁有它自己的靜態(tài)字段的備份—數(shù)據(jù)并不共享。每一個應用程序的數(shù)據(jù)和代碼安全獨立存在并且在一邊界之內(nèi)由appdomain提供。

  為了在appdomain之間通訊或者在appdomain之間交換對象,需要查看在.net中穿過邊界的通訊技術,例如.net細微的或web 服務。

  對將appdomain作為邊界思想的警告之一是asp.net應用程序在默認情況下會帶著充分的信任運行。充分信任的代碼可以執(zhí)行本地代碼,并且本地代碼可以本質(zhì)地在進程之內(nèi)的任何內(nèi)容。需要運行帶著部分信任執(zhí)行應用程序來約束存取不完整的代碼并且對安全的appdomain驗證所有代碼。

  隱藏備份并且重新啟動

  一旦一個集合加載到一個appdomain,沒有辦法從appdomain集合的辦法。不過,從一個進程中移除一個appdomain是有可能的。

  如果將一個已更新的dll復制到一個應用程序的子目錄中,從asp.net的運行時間知道有新代碼要執(zhí)行。既然asp.net不能將dll復制到已存在的appdomain中,它就會起動一個新appdomain。舊的應用程序域是“排水已停止”,那就是,存在的需要被允許完成執(zhí)行并且一旦它們執(zhí)行完成appdomain可以卸載。帶有新代碼的新的appdomain就會開始并且開始所有的新請求。

  典型地說,當一個dll加載進一個進程時,進程對dll加鎖并且不能對磁盤的上的文件進行覆蓋。不過,appdomain有一個眾所周知的特點:隱藏復制那所有的允許保留在磁盤上的那些未被加鎖的可替換的集合。

  運行時間對二進制子目錄的帶有shadow copy的asp.net進行初始化。appdomain將任何的加鎖之前的dll從二進制子目錄中拷貝到一個臨時位置并且再將這些dll加載到內(nèi)存。shadow copy允許沒有將網(wǎng)頁在線的情況下對所有在二進制子目錄中的任何dll進行重寫。

  熟練掌握domain

  應用程序域替換os進程將為單獨的.net結點單元。一個可理解的應用程序域?qū)o你一個在asp.net應用程序后的手工發(fā)生的概念。使用appdomain類的currentdomain屬性,可以檢查關于代碼正在運行的appdomain的屬性,包括我們在此文章中討論的shadow copy。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 兰州市| 马尔康县| 临泉县| 苗栗市| 资溪县| 临桂县| 张掖市| 方山县| 贺兰县| 句容市| 高要市| 平昌县| 青海省| 阜南县| 永济市| 吉隆县| 阳江市| 沂南县| 武宁县| 铜山县| 剑河县| 千阳县| 同仁县| 榕江县| 张掖市| 石台县| 岳阳县| 麻江县| 斗六市| 崇信县| 浦县| 盐边县| 黄龙县| 遂宁市| 凤凰县| 邳州市| 德阳市| 招远市| 武鸣县| 洛扎县| 漠河县|