1

在 ASP.NET/IIS 中,当发生部署或 web.config 更改(或其他一些情况)时,ASP.NET 将为站点启动一个新的应用程序域。新的应用程序域接收请求,而旧的应用程序域在被销毁之前有一些时间来减速(完成当前请求)。我希望能够检测我的代码是作为“当前”应用程序域运行还是已被替换。有没有代码内的方法来做到这一点?

4

1 回答 1

0

在系统内没有确定这一点的万无一失的方法,因此您需要构建自己的机制。例如,即使您设法确定您是最新的应用程序域,这仍然不能表明您是处理请求的应用程序,例如 IIS 有时可以并且将回收整个工作进程(例如当全局配置更改完成,或者当它无法 ping 回进程激活服务等时),在这些情况下,实际上可能有两个 w3wp.exe 实例(称为重叠回收),此时您的应用程序域逻辑将失败。当然,当您需要扩展到更多机器时,问题进一步变成了分布式系统(甚至不包括会进一步复杂化的 Web Gardens)。

因此,根据您对行为差异的敏感程度,您可能会更好地使用其他解决方案,特别是如果您已经拥有外部状态,例如 SQL 数据库等,那么您可能会更好地移动该领导者在那里选举,或者使用配备该逻辑的更好的框架。

于 2015-11-19T16:59:12.487 回答