顯示具有 DotNetFramework-AppDomain and Service 標籤的文章。 顯示所有文章
顯示具有 DotNetFramework-AppDomain and Service 標籤的文章。 顯示所有文章

2012年3月6日 星期二

建立AppDomain

什麼是應用程式定義域 ( application domain )

一般當執行一個應用程式的時候,系統會建立一個新的處理序 (process),不同的處理序,其記憶體的管理或資源的存取基本上是獨立的。 當這個程式需要執行外部應用程式(組件),它可以直接啟動這個外部組件,但這樣做,系統也會建立一個新的處理序,這麼做除了會多耗用資源外,也有安全上的弱點(security vulnerabilities)。 要避免這些風險的最好方法就是建立一個有限權限的 AppDomain ,然後將要執行的這個外部組件載入這個 AppDomain 中執行。

應用程式定義域 (AppDomain)

  • AppDomain 是一個邏輯的儲存空間,允許在單一個處理序(process)中,執行多個組件(assembly)。
  • 每一個組件的執行個體,其記憶體空間和資源都是獨立的,無法彼此直接存取。
  • IIS 中,ASP.NET 會為每個使用者分別建立一個 AppDomain
  • AppDomain 提供了如 process 的許多功能,但是不用花費建立 process 的額外負載。
  • 某一個 AppDomain 即使掛了,也不會引響其他的 AppDomian 。

設定AppDomain組態

前言

當建立一個 AppDomain 時,我們也可以修改它的屬性設定以適應要載入的組件。 例如,當我們想載入一個不明的組件到某個 AppDomain ,我們可以建立一個較小使用權限的 AppDomain ,以降低安全性弱點的風險。 AppDomain 不僅可以提供隔離單位,還可以降低被攻擊時所可能造成的損害。 尤其當呼叫組件執行時,適當的限制 AppDomain 的權限,將可大大減少惡意行為風險的發生。 例如,當我們使用一個外購的組件進行指定目錄的備份監控,要如何肯定這個程式不會讀取其他目錄的資料呢?或者如何提防它是否會透過網路將資料外傳呢? 反之,當我們設計一個組件,若沒有做任何安全性的限制,它會不會變成漏洞,反而被其他組件拿來當成跳板,執行不該有的行為呢?

Windows Service

Microsoft Windows 服務,也就是先前的 NT 服務,可讓您建立長期執行的應用程式,在應用程式本身的 Windows 工作階段 (Session) 中執行。 這些服務可以在電腦啟動時自動啟動,也可以暫停或重新啟動,都不會顯示任何使用者介面。 這些功能使得服務非常適合在伺服器中使用,或每當需要不干擾使用同一部電腦之其他使用者的長期執行功能時使用。 您也可以在不同於登入使用者或預設電腦帳戶的特定使用者帳戶的安全性內容下執行服務。