...fin qua tutto ok fino a quando dopo aver implementato un sistema di upload di immagini noto che il server in cui risiede l'applicazione va in bomba dopo ogni upload (che possono essere anche multipli) :-|
Ma che cavolo è? Un accurato trace mi identifica il colpevole: Directory.Delete()!
Dopo ogni upload io eliminavo una cartella temporanea di appoggio e questo comando (anche la rinomina di una cartella) genera un recycle del worker process IIS... e nel mio caso causava la rigenerazione della cache per ogni file uploadato!
Come risolvere?
- o non si elimina la cartella (brutto e dove starebbe il divertimento :-)
- Mr Google mi fa trovare questo blog (Haissam [MCAD]) in cui propone una soluzione attraverso Reflection.
Basta aggiungere questa parte di codice nell'Application_Start del Global .asax:
PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
object o = p.GetValue(null, null);
FieldInfo f = o.GetType().GetField("_dirMonSubdirs", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
object monitor = f.GetValue(o);
MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", BindingFlags.Instance | BindingFlags.NonPublic);
m.Invoke(monitor, new object[] { });
object o = p.GetValue(null, null);
FieldInfo f = o.GetType().GetField("_dirMonSubdirs", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
object monitor = f.GetValue(o);
MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", BindingFlags.Instance | BindingFlags.NonPublic);
m.Invoke(monitor, new object[] { });
Ricordando di importare il name space System.Reflection.
Nessun commento:
Posta un commento