2012-03-16 46 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。

相关问题