2

删除部署或重新启动实际生产 Web 角色时,不会调用 ASP.NET Web 应用的 Application_End 方法。

卸载应用程序时,我需要执行清理操作(如删除动态服务总线订阅)。

有任何想法吗?

4

2 回答 2

0

我遇到了同样的问题,我设置了一个不太理想的解决方法 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 角色以提升的权限运行)

注意:一定要通过角色重启和缩减操作来测试你的关闭代码;我发现像数据库连接这样的东西在缩减期间可能不起作用

于 2013-07-15T15:13:21.080 回答
0

我不知道为什么 Application_End 没有在您的 Web 角色上被调用(或者看起来不像被调用),但您应该使用 Application_End 来清理您的实例。这可能意味着您的代码在多个场合运行(例如每次循环),而这不是必需的。

清理操作应该在 OnStop 方法中的 WebRole.cs 中进行。但请注意,您的清理操作时间有限

于 2012-11-08T22:15:06.413 回答