在ASP.NET / IIS中,当部署发生或web.config发生更改时(或其他一些场景),ASP.NET将为该站点启动一个新的应用程序域。新的应用程序域接收请求,而旧的应用程序域在被销毁之前有一段时间可以减速(完成它的当前请求)。我希望能够检测我的代码是作为“当前”应用程序域运行还是已被替换。是否有编码方式来执行此操作?
答案 0 :(得分:0)
在系统中没有防弹方法来确定,因此您需要构建自己的机制。例如,即使您设法确定您是最新的应用程序域,这仍然不表示您是应用程序处理请求,例如IIS可以并且将有时回收整个工作进程(例如全局完成配置更改,或者无法ping回流程激活服务等),在这些情况下,实际上可能存在两个w3wp.exe实例(称为重叠循环),此时您的应用程序域逻辑将失败。当然,当你需要扩展到更多的机器时,问题进一步成为一个分布式系统(甚至不计算Web Gardens会进一步复杂化。)
因此,根据您的行为差异的敏感程度,您可能会更好地使用其他解决方案,特别是如果您已经拥有外部状态,例如SQL数据库等,那么您可能会最好在那里举行领导选举,或者使用配备了这种逻辑的更好的框架。