如何找出 Azure 应用服务上触发Application_End的原因

本文关键字:End Application Azure 何找出 应用服务 | 更新日期: 2023-09-27 18:34:07

我们有一个MVC ASP.NET Web 应用程序作为应用服务托管在 Azure 上。每天 3 或 4 次我可以看到它重新启动。我在global.asax中Application_End()登录System.Web.HostingEnvrionment.ShutdownReason,原因又回到了"配置更改",根据文档,这意味着应用程序配置已更改。

我已经询问了我们的小团队,没有人手动更改配置。 搜索代码,我没有看到我们以编程方式更改它的任何地方。 Azure 站点配置为始终打开。 内存使用在发生时并不接近极限,尽管在较高的流量时间似乎更频繁地发生。

有没有办法获取更改的特定文件,以便我可以将其记录在Application_End()中?或者任何其他方法可以获取更多详细信息?

如何找出 Azure 应用服务上触发Application_End的原因

Scott Guthrie 有一篇关于如何使用反射从应用程序关闭事件中获取更多信息的博客文章。 我会详细阅读他的帖子以了解有关问题的更多信息。

Scott页面中用于提取更多信息的代码片段如下。 然后,您可以使用正在使用的任何工具记录它。

 HttpRuntime runtime = (HttpRuntime)typeof(System.Web.HttpRuntime)
                                                  .InvokeMember("_theRuntime",
                                                                 BindingFlags.NonPublic
                                                                 | BindingFlags.Static
                                                                 | BindingFlags.GetField,
                                                                 null,
                                                                 null,
                                                                 null);
 if (runtime == null)
     return;
 string shutDownMessage = (string)runtime.GetType().InvokeMember("_shutDownMessage",
                                                                 BindingFlags.NonPublic
                                                                |BindingFlags.Instance
                                                                |BindingFlags.GetField,
                                                                         null,
                                                                         runtime,
                                                                         null);
 string shutDownStack = (string)runtime.GetType().InvokeMember("_shutDownStack",
                                                                 BindingFlags.NonPublic
                                                                | BindingFlags.Instance
                                                                | BindingFlags.GetField,
                                                                       null,
                                                                       runtime,
                                                                       null);

注释中提到,您可能需要对代码具有某些权限才能执行私有反射。

祝你好运,我希望这能帮助你更接近解决问题。