2

在构建 ASP.NET 3.5 WAP 时,我总是感到沮丧,因为无论我如何“隔离”或“封装”逻辑或 UI 位,我仍然会在需要时随时关闭整个站点更新一行代码。我可能会误解 ASP.NET 如何处理“bin”目录中的更改,但考虑到“为什么我的 AppDomain 正在卸载?”的数量。各个组中的消息,这似乎仍然是要避免的。

有没有人有任何指导和/或框架来真正模块化 ASP.NET 3.5 WAP,以便可以“在飞行中”添加/更新逻辑和页面?我用 Google 搜索了 System.AddIn,但它似乎专注于 WPF 应用程序。

谢谢你的帮助!

詹姆斯怀特

4

4 回答 4

1

这真的很难实现,因为 .NET 不支持卸载已加载到应用程序域中的类型。

一种方法是使用应用程序域,或者让 WCF 为您做这件事。

另一个是实现ayende 的hod 代码交换

第三种方法是将逻辑放在动态编译的部分(ASPX)中。但是,应用程序将在可配置的更改量后重新启动。

于 2008-11-11T20:30:16.713 回答
1

使用两台或多台服务器。当你需要升级时,取下一个,升级它,提升它,取下另一个,升级它,提升它。

能够做到这一点需要一些努力 - 同时运行两个版本 - 因为数据库更改等可能很棘手。但是同样的努力在能够回滚更改方面也得到了回报,也许在“实验性”服务器上只托管几个用户等。更不用说水平扩展通常是一件好事:)

于 2008-11-11T20:31:44.463 回答
1

您可以在此处采用不同的方法,即重新启动 AppDomain 不会影响站点的可用性。

为此,请将会话移出进程,或完全停止依赖会话。

如果您这样做,重新启动 appdomain 并不是什么大问题,并且您正在准备您的应用程序,以便在您达到这一点时更轻松地跨集群进行可扩展性。

于 2008-11-11T20:33:17.267 回答
0

只是一个额外的想法,但我敢打赌,这就是整个“COM+”位所允许的(共享主机除外)。将逻辑分解为小型无状态香肠工厂可能允许顺利进行飞行中的修复操作。

于 2008-11-12T05:04:57.670 回答