2010-08-25 2 views
0

J'ai un contenu statique comme html, css javascript stocké dans DB. Lorsqu'un utilisateur demande pour cela, je crée un fichier temporaire dans le répertoire virtuel et renvoie l'URL.IIS Application pool se bloque lorsque je crée des fichiers temporaires dans mon répertoire virtuel

Mon application Web est hébergée sur un serveur IIS. Sur certains systèmes à la création d'un fichier, mon pool d'applications IIS se bloque et redémarre. Si je désactive la surveillance de fichier si le problème est résolu, mais je n'ai pas ce luxe quand je suis en train de perdre à la fin du client.

Y a-t-il un moyen par lequel je peux éviter le plantage du pool d'applications lors de la création du fichier?

Si non est-il un moyen par lequel je peux servir du contenu statique comme html, css, images, xml et js sans créer de fichiers temporaires. J'aurais besoin d'une manière généralisée de gérer tous ces types de données.

Répondre

1

trouvé un extrait de code qui a exécuté en cas de démarrage de l'application désactiver la notification de modification de fichier sur le dossier Web racine

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[] { }); 

Il y a un autre extrait avec une légère variation

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

Dans les deux cas le script a besoin admin privilèges pour exécuter avec succès (essayé en utilisant un compte invité et a échoué)

Questions connexes