2012-03-16 33 views
2

我正在尋找一種解決方案,使我可以使用各種程序集中定義的新頁面更新一個asp.net網站,而無需卸載主AppDomain(即xcopy到/ bin將不起作用)。服務來自輔助AppDomain的HTTP請求或避免應用程序在更新DLL時重新啓動

雖然交叉appdomain調用似乎對我來說很清晰,但是有可能將「生活在另一個appdomain中的System.Web.UI.Page」提供給正在提供ASP.NET請求的AppDomain?

在構建提供程序,虛擬路徑提供程序和應用程序域搜索時,我認爲主要的appdomain重新啓動可能可以忽略不計,與任何次要appdomain或自定義構建提供程序實現的努力和潛在不穩定性相比可能微不足道。

感謝您的想法!

+1

爲什麼您需要在不重新啓動應用程序的情況下更新組件? – svick 2012-03-16 00:53:36

回答

0

我不認爲這是相當如您懷疑的繁重。我已經爲一個Outlook加載項跨AppDomain調用工作,以動態加載不同的版本,並沒有太多。雖然我沒有在ASP.NET中完成,所以不知道你可能陷入哪些陷阱。

就個人而言,我想探討兩個選擇:

  1. 打在Page_Load事件一個斷點,檢查堆棧跟蹤。通過System.Web.dll查看調用 - IExecutionStep.Execute(),哪一步進入您的Web應用程序DLL?進一步向下的東西已經註冊或確定哪個Page類將處理請求。訣竅?顛覆標準行爲(抱歉,不知道在哪裏或如何,但我隱約回憶一下這件事)。
  2. 通過實現明確處理請求的模塊來顛覆/繞過更多的Web管道。

編輯:爲了詳細說明選項1,PageHandlerFactory類是我在想的那個類。 http://msdn.microsoft.com/en-us/library/system.web.ui.pagehandlerfactory.aspx本文特別感興趣的是評論「要構建自定義頁面處理程序工廠,實現IHttpHandlerFactory並在httpHandlers元素(ASP.NET設置架構)配置中爲應用程序的Web.config文件註冊自定義PageHandlerFactory類

換句話說,如果你實現自己的PageHandlerFactory,你應該能夠處理頁面請求,但是你想要,包括把請求交給另一個AppDomain。

相關問題