代码之家  ›  专栏  ›  技术社区  ›  Vinay B R

在虚拟目录中创建临时文件时,IIS应用程序池崩溃

  •  0
  • Vinay B R  · 技术社区  · 14 年前

    我的web应用托管在IIS服务器上。在某些系统上,在创建文件时,我的IIS应用程序池崩溃并重新启动。如果我禁用文件监控,虽然问题已经解决,但我没有这种奢侈的时候,我在客户端部署。

    有没有什么方法可以避免在创建文件时应用程序池崩溃?

    如果没有任何方法,我可以提供静态内容,如html、css、图像、xml和js,而无需创建临时文件。我需要一种处理所有这些数据类型的通用方法。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Vinay B R    14 年前

    在根web文件夹的应用程序启动事件禁用文件更改通知中找到了执行的代码段

    System.Reflection.PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
    
    object o = p.GetValue(null, null);
    
    System.Reflection.FieldInfo f = o.GetType().GetField("_dirMonSubdirs", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.IgnoreCase);
    
    object monitor = f.GetValue(o); //Returns NULL
    
    System.Reflection.MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); m.Invoke(monitor, new object[] { });
    

    另一个略有变化的片段

    var theRuntime = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
    var fcmField = typeof(HttpRuntime).GetField("_fcm", BindingFlags.NonPublic | BindingFlags.Instance);
    
    var fcm = fcmField.GetValue(theRuntime);
    fcmField.FieldType.GetMethod("Stop", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(fcm, null);
    

    管理特权 成功运行(尝试使用来宾帐户但失败)