在更新DLL时,从辅助AppDomain提供HTTP请求或避免应用程序重新启动

时间:2012-03-16 00:40:45

标签: asp.net .net marshalling appdomain provider

我正在寻找一个解决方案,让我可以使用各种程序集中定义的新页面更新asp.net网站,而不会卸载主appdomain(即xcopy到/ bin将无效)。

虽然跨appdomain调用对我来说似乎很清楚,但是有可能将另一个appdomain中的System.Web.UI.Page“提供”给提供ASP.NET请求的appdomain吗?

搜索构建提供程序,虚拟路径提供程序和应用程序域让我想到,与任何辅助应用程序域或自定义构建提供程序实现的工作和潜在不稳定性相比,主应用程序域重新启动可能可以忽略不计。

感谢您的想法!

1 个答案:

答案 0 :(得分:0)

我认为这不像你怀疑的那样相当。我已经使用跨AppDomain调用Outlook加载项来动态加载不同的版本,并没有多少。我没有在ASP.NET中完成它,所以不知道你可能会陷入什么陷阱。

就个人而言,我会探讨两个选择:

  1. 点击Page_Load事件的断点并检查堆栈跟踪。查看System.Web.dll - IExecutionStep.Execute()的调用,它会进入您的网络应用DLL吗?堆栈下面的东西已经注册或以其他方式确定哪个Page类将处理请求。诀窍?颠覆标准行为(对不起,不知道在哪里或如何,但我依旧回忆起曾经读过这件事的事情)。
  2. 通过实施模块来明确处理您的请求,从而破坏/绕过更多的Web管道。
  3. 编辑:为了详细说明选项1,我正在考虑使用PageHandlerFactory类。 http://msdn.microsoft.com/en-us/library/system.web.ui.pagehandlerfactory.aspx本文特别感兴趣的是注释“要构建自定义页面处理程序工厂,实现IHttpHandlerFactory并在http.andler元素中的应用程序的Web.config文件中注册自定义PageHandlerFactory类(ASP .NET设置架构)配置部分。

    换句话说,如果你实现自己的PageHandlerFactory,你应该能够处理你想要的页面请求,包括将请求交给另一个AppDomain。