删除部署或重新启动实际生产 Web 角色时,不会调用 ASP.NET Web 应用的 Application_End 方法。
卸载应用程序时,我需要执行清理操作(如删除动态服务总线订阅)。
有任何想法吗?
删除部署或重新启动实际生产 Web 角色时,不会调用 ASP.NET Web 应用的 Application_End 方法。
卸载应用程序时,我需要执行清理操作(如删除动态服务总线订阅)。
有任何想法吗?
我遇到了同样的问题,我设置了一个不太理想的解决方法 Inspired by this thread。
在 WebRole OnStop 处理程序中,调用它以回收角色 VM 上的所有应用程序池:
var p = Process.Start("cmd.exe", Environment.ExpandEnvironmentVariables(@"/C %windir%\system32\inetsrv\appcmd list apppool /xml | %windir%\system32\inetsrv\appcmd.exe recycle apppool /in"));
p.WaitForExit();
(您需要通过<Runtime executionContext="elevated" />
直接添加到 WebRole 节点下的 csdef 文件来确保您的 Web 角色以提升的权限运行)
注意:一定要通过角色重启和缩减操作来测试你的关闭代码;我发现像数据库连接这样的东西在缩减期间可能不起作用。
我不知道为什么 Application_End 没有在您的 Web 角色上被调用(或者看起来不像被调用),但您应该使用 Application_End 来清理您的实例。这可能意味着您的代码在多个场合运行(例如每次循环),而这不是必需的。
清理操作应该在 OnStop 方法中的 WebRole.cs 中进行。但请注意,您的清理操作时间有限。