ASP.NET 2.0 y DirectoryDelete() Se resetea la

Transcripción

ASP.NET 2.0 y DirectoryDelete() Se resetea la
ASP.NET 2.0 y DirectoryDelete() ... Se resetea la aplicación! (solución)
Escrito por Enrique
Han intentado borrar un directorio dentro de una aplicación web ?
Bueno no lo intenten salvo que quieran trabajar doble: Microsoft ha introducido a partir de su
version 2.0 del framework un "feature" o característica que en pocas palabras RESETEA EL
PROCESO del sitio WEB si detecta que alguien BORRA una carpeta dentro del directorio
donde se encuentra esa Web en el servidor.
No es un bug, recalco, sino que una "funcionalidad". La explicación de esta conducta, según he
entendido es que resuelve (supongo que en aquellos sitios pésimamente resueltos, donde no
hay gestión alguna de la cache) la posibilidad de que un sitio web siga mostrando contenidos
cuando ya fueron borrados.
Dicho de otra forma, es una onda "Le reseteo el sitio Web para asegurarme que lo que fuera
que tenía adentro de esta carpeta, no siga mostrándose, por haber quedado cacheada".
Una bobada. En fin ... El chisme que está funcionando en el background, revisando si se borra
una carpeta, se denomina "FCN" (File Change Notification).
Puede ser manipulado programaticamente desde la propia aplicación. Aquí está el código en
vb.net que utilicé yo, dentro de Application_start, en el global.asa:
Dim p As System.Reflection.PropertyInfo =
GetType(System.Web.HttpRuntime).GetProperty("FileChangesMonitor",
System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.[Public] Or
System.Reflection.BindingFlags.[Static])
Dim o As Object = p.GetValue(Nothing, Nothing)
Dim f As System.Reflection.FieldInfo = o.[GetType]().GetField("_dirMonSubdirs",
System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic Or
System.Reflection.BindingFlags.IgnoreCase)
Dim monitor As Object = f.GetValue(o)
1/2
ASP.NET 2.0 y DirectoryDelete() ... Se resetea la aplicación! (solución)
Escrito por Enrique
Dim m As System.Reflection.MethodInfo =
monitor.[GetType]().GetMethod("StopMonitoring", System.Reflection.BindingFlags.Instance Or
System.Reflection.BindingFlags.NonPublic)
m.Invoke(monitor, New Object() {})
Este código no lo escribí yo: lo saque de la web, mirando varios blogs, ya que toda esta historia
le viene ocurriendo a mucha gente y abundaban las soluciones alternativas. Hace que el FCN
deje de monitorear los subdirectorios que podamos haber creado dentro de nuestra aplicación
web. Sin embargo, continúa monitoreando la carpeta /bin que SI ES IMPORTANTE revisar por
si el sitio tiene una actualización del código.
2/2

Documentos relacionados