如何让ASP.NET MVC Web应用程序加载域中立性?

7
我的公司有很多客户,我们目前每个服务器只能处理有限数量的客户。然而,每个客户都使用相同的核心Web应用程序。目前,一些内容在每个站点本地存储,因此我们不能让它们使用相同的站点/应用程序池;尽管我们已经有一个多租户转换项目。
我们强烈地签署所有的程序集,我想看看是否可以让它们在ASP.NET中以域中立方式加载,这是一个有趣的想法。这样做的好处是可以大幅减少我们的内存成本,这是我们当前最高的成本和限制因素之一。此外,似乎我们可以简化部署过程,当前部署过程(编译)受IO / CPU限制,通常会花费我们约6小时的时间。
这项任务意味着我要将程序集从应用程序池的应用程序域移动到共享域。
我对域中立加载的要求的理解如下:
1. 程序集必须被强名称并放置在GAC中。 2. 绑定包含的依赖项必须在GAC中 [且必须强名称]。
我试图让这个小型示例应用程序工作,但我无法让它在共享域中工作。我首先尝试将Newtonsoft.Json放入GAC中,并激动地发现它在重新启动后切换到了共享域。然而,即使我将所有的程序集都放入GAC中,也无法让其他程序集切换到共享域:
我的目标是让我的主要应用程序DLL以域中立方式加载。如何调试/继续解决为什么剩余的程序集没有作为域中立加载?
此外,我对NGEN代码页面共享与共享域加载的程序集之间的关系有点困惑。

你尝试过查看这篇文章吗?http://blogs.msdn.com/b/junfeng/archive/2004/08/05/208375.aspx - KnightFox
我很好奇你在这个练习中的最终目标是什么?是为了性能还是维护或其他什么原因? - Jonathan
我认为这种设置节省的内存并不能与所付出的努力相提并论。还有许多其他因素可以更有效地节约资源。 - Jonathan
是的。我们目前的完整更新发布流程需要大约六个小时的时间。我们目前每两周进行一次此操作,需要多人值班观察并处理问题,并进行生产检查的跟进。我知道有很多不同的方法来解决这个问题。我们目前受到内存限制,无法在每个服务器上托管更多的站点,我也知道有其他方法来解决这个问题。我正在探索一个想法,并试图了解.NET如何处理域中立性。这可能只是一个教育性的尝试,但如果它适用于某个用例,那就更好了! - Joshua Enfield
我怀疑这不会解决你的内存和IO问题,因为每个应用程序仍然有自己的内存空间和开销。此外,我读到的许多文章都说域中立存在开销。 - Jonathan
显示剩余2条评论
1个回答

1
ASP.NET 4.5中的Intern assemblies可能是一个解决方案。寻找aspnet_intern命令和interndir参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接