2010-08-25 77 views
0

我有靜態內容,例如存儲在數據庫中的html,css javascript。當用戶請求這些我在虛擬目錄中創建一個臨時文件並返回該網址。當我在我的虛擬目錄中創建臨時文件時,IIS應用程序池崩潰

我的web應用程序託管在IIS服務器上。在創建文件的某些系統上,我的IIS應用程序池崩潰並重新啓動。如果我禁用文件監控,雖然問題得到解決,但我沒有這種奢侈品時,我在客戶端。

有什麼辦法可以避免應用程序池在創建文件時崩潰?

如果沒有任何方式可以提供像html,css,images,xml和js這樣的靜態內容而無需創建臨時文件。我需要一種處理所有這些數據類型的通用方法。

回答

1

發現這在應用啓動事件而執行的根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); 

另一個片斷在兩種情況下腳本需要管理員privilages成功運行(嘗試使用guest帳戶和失敗)

相關問題