1

我做了一些步骤,之后我的应用程序自动重新启动。怎么可能?请,任何人都可以建议一些东西来调试该员工并理解 - 这种奇怪行为的原因是什么。

也不例外,日志很清楚。应用程序将 autofac 用于 DI。请随时问我任何其他问题。解决这个问题对我来说非常重要。多谢。

UPD:此方法引起的问题。如果我删除它 - 一切正常。

public void DeleteUserPreviewDir()
{
    string path = GetUserPreviewDir();
    Action<string> del = null;
    del = s => {
                    string[] files = Directory.GetFiles(s);
                    string[] dirs = Directory.GetDirectories(s);

                    foreach (string file in files)
                    {
                        File.SetAttributes(file, FileAttributes.Normal);
                        File.Delete(file);
                    }

                    foreach (string dir in dirs)
                    {
                        del(dir);
                    }

                    Directory.Delete(s, false);
              };
    del(path);
}

但是 UserPreviewDir 放在根 web 文件夹下,而不是 bin 文件夹中。文件结构如下: root\tempfiles\folder_which_delete bin dir 放在 root\bin

4

3 回答 3

2

ASP.NET 应用程序可能重新启动的原因有多种:

  • 在一段时间不活动后,IIS 可以简单地回收应用程序池(这段时间可以在应用程序池的属性中配置)
  • 您的应用程序达到一定的内存或 CPU 使用阈值,IIS 将回收它(这些阈值可在 IIS 中配置)
  • 您已更新web.config或某些位于bin文件夹中的程序集(添加了程序集、更新了现有程序集、删除了程序集)。
  • 您已更新Global.asax根文件夹中的文件。
于 2012-05-02T09:50:34.877 回答
0

这种行为的原因是我正在删除站点子文件夹。为什么应用程序回收 - 这仍然是未知数。

于 2012-05-06T12:53:12.710 回答
0

我也有类似的问题,为了找出重启的原因,您可以使用以下代码(只需将其放入 Global.asax.cs 并更改m_logger.Fatal为您用于记录的任何内容):

protected void Application_EndRequest()
{
    HttpRuntime runtime = (HttpRuntime)typeof(HttpRuntime).InvokeMember("_theRuntime", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField, null, null, null);

    if (runtime == null)
    {
        BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField;
        string shutDownMessage = (string) runtime.GetType().InvokeMember("_shutDownMessage",
            bindingFlags,
            null,
            runtime,
            null);
        string shutDownStack = (string) runtime.GetType().InvokeMember("_shutDownStack",
            bindingFlags,
            null,
            runtime,
            null);

        if (!String.IsNullOrEmpty(shutDownMessage))
            m_logger.Fatal(String.Format("_shutDownMessage={0}\r\n\r\n_shutDownStack={1}", shutDownMessage, shutDownStack));
    }
}
于 2016-04-18T14:48:34.063 回答