对于常规装配,可以使用MEF动态加载装配。如果这些程序集需要实时更新,建议使用AppDomain来托管动态程序集(可能可以使用托管外接程序框架(MAF))。当需要更新时,appdomain将停止,程序集将更新并重新加载appdomain。
ASP .NET加载的包含类后面代码的程序集怎么样?如何在不强制重新启动主应用程序域的情况下更新它们。是否可以在动态应用程序域中托管我的一些页面?你会怎么做?这个appdomain可以共享登录令牌和身份验证的东西,这样用户就不必重新登录了吗?
由于
答案 0 :(得分:2)
MEF不支持AppDomain隔离,所以不幸的是,即使在重构期间,先前加载的那些程序集仍然会加载到主Web应用程序AppDomain中。在ASP.NET中,您需要做两件事:
对物理文件(例如.aspx,.cshtml等)的任何更改,或对配置文件(.config)的任何更改,或对\ bin目录的任何更改都将导致应用程序被回收。这是由于两件事,即页面/配置的文件监视和\ bin目录的文件监视(这是因为默认情况下ASP.NET使用文件的阴影复制 - 建议这样做。)
要在另一个AppDomain中使用MEF,需要通过序列化或MarshalByRef
进行大量的跨域通信,我认为这不是一个干净的实现。不确定如何触发用于在另一个AppDomain中动态编译页面的BuildProvider
个实例。
我想知道你是否考虑过这个问题。从IIS6开始,HTTP.SYS管理了传入请求到相应网站的路由,这是在内核级别处理的。即使主应用程序确实重新启动(可能有多种原因),也不会丢弃任何请求,它只会在传递请求之前排队等待新的工作进程。当然,从用户的角度来看,他们可能会注意到等待新应用程序重启的空闲时间,但实际上,您有多少时间会进行这些更改?
许多应用程序设计都受到过度工程的困扰。您可能希望针对每个场景进行设计,但实际上,维护一个简单但可扩展的系统更容易。在我看来,想要做你所指定的将被归类为过度工程。保持简单。
答案 1 :(得分:0)
使用会话“StateServer”将保留应用程序池回收之间的身份验证(由文件更新引起)。
对于您的实际问题:
我想你的问题是说这种方法不起作用?你得到什么错误......