2011-08-30 48 views
3

應用程序域在IIS/ASP.NET如何在ASP.NET 4 WebForm應用程序中使用AppDomain?

給定一個ASP.NET WebForms的門戶IIS和使用書面在ASP.NET MVC3隔離模塊內被託管,什麼是適當的API在執行模塊使用在運行時?

  1. 的AppDomain API
  2. ApplicationHost API
  3. AppManagerAppDomainFactory類
  4. 不恰當的,使用IIS內置隔離機制,並找到另一種方式來承載在一個門戶網站的母版結構
  5. MVC3生成的內容? ?

背景

我們與許多使用C#/託管的WebForms編寫的應用程序的傳統自定義門戶。目前,門戶和所有應用程序都存在於一個項目中;他們都在同一時間部署。我想將應用程序與門戶分開,將它們作爲模塊實施到門戶,並在運行時隔離每個模塊的執行。我們希望在ASP.NET MVC 3中移植/重寫每個應用程序。

當我們移植每個應用程序時,我最初的想法是門戶網站處理每個請求,在AppDomain中加載應用程序/模塊,將請求轉發給模塊,獲取生成的html,並將其放置在門戶MasterPage的ContentPlaceHolder中。在我走下這條路之前,我認爲在基礎上進行一些StackOverflow驗證是明智的。

回答

2

當插件由第三方提供並且您希望對插件應用嚴格的安全限制時,將插件/模塊隔離到單獨的AppDomain中非常有用。當你自己編寫插件時,這種隔離級別不是必需的,而且是反作用的。

您可以通過適當的項目參考達到必要的隔離級別。定義一個單獨的項目,其中包含插件API和任何關聯的值對象的接口。讓你的插件引用這個項目並實現合適的API。然後你的主機應用程序只能通過這個API來引用插件。這使您無需處理管理多個AppDomain就可以實現代碼分離和更輕鬆的維護。

+0

謝謝@塞繆爾。很好的答案,值得考慮。我正在探索隔離作爲過渡技術。我很少關心安全問題。更多關於記憶和穩定性。我已經創建了一個新的應用程序(在WebForms中),它使用依賴注入和許多其他第三方庫。 DI是通過WebActivator啓動的(現在任何時候門戶都可以運行,並且可以將其關閉)。還爲每個應用程序的靜態類,庫,程序集加載助手進程的生命週期。門戶網站整天都在使用,如果整天發佈特定於模塊的內存,那將會很不錯。 – Jason

+0

@Jason,這聽起來像你正在試圖優化你還沒有的問題,而且可能永遠都不會有。按照它對您的需求有意義的方式進行編寫,然後對應用進行配置以查看需要優化的內容。除此之外,您可以隨時按計劃回收asp.net應用程序,以便快速骯髒的資源發佈。 –

相關問題