• Increase font size
  • Default font size
  • Decrease font size
  • dark
  • light
  • leftlayout
  • rightlayout

ASP.NET 2.0 y DirectoryDelete() ... Se resetea la aplicación! (solución)

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



Comentarios ()
 

Buscador

En Línea

Tenemos 2 invitados conectado(s)

Diseño