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

我已经问过我们的小型团队,没有人手动更改配置。弄清代码后,我看不到我们以编程方式对其进行更改的任何地方。天蓝色站点配置为始终打开。内存使用在发生时并没有达到极限,尽管它似乎在较高的通信时间内更频繁地发生。

是否有办法获取更改的特定文件,以便我可以将其记录在Application_End()中?还是任何其他方式来获取更多细节?

最佳答案

斯科特·古思里(Scott Guthrie)的博客文章介绍了如何通过反射获得更多的information out of the Application Shut Down events。我将详细阅读他的文章,以查找有关问题的更多信息。

下面是斯科特页面上用于提取更多信息的代码段。然后,您可以使用所使用的任何工具对其进行记录。

 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);


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

祝您好运,我希望这可以帮助您更进一步解决问题。

关于c# - 如何找出为什么Application_End在Azure App Service上触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35304556/

10-15 03:01