Cómo: Almacenar en caché el resultado de las páginas con dependencias de archivos

Actualización: noviembre 2007

A veces puede ser deseable quitar una página de la caché de resultados al cambiar un archivo. Por ejemplo, puede haber una página cuyo contenido procede de un informe con un uso intensivo del proceso que genera un archivo XML como resultado. Sólo se tiene que volver a procesar la página si se cambia el archivo XML. Para limitar el número de operaciones de volver a procesar al estrictamente necesario, se puede utilizar la directiva de caché de la página que depende de un único archivo. Si es necesario, puede hacer que la página almacenada en caché dependa de más de un archivo.

Nota:

Puede quitar explícitamente cualquier página de la caché de resultados llamando al método RemoveOutputCacheItem. En función de las necesidades de la aplicación, esto se puede hacer en el archivo Global.asax file, en un control de servidor ASP.NET personalizado o en una página.

Para hacer que el resultado de la página en caché dependa de un archivo

  1. Especifique las opciones para almacenar el resultado de la página en caché, ya sea de forma declarativa o mediante programación. Para obtener más información, vea Cómo: Establecer los valores de caducidad del almacenamiento en caché de páginas ASP.NET, Establecer el almacenamiento en caché de una página y Almacenar en memoria caché varias versiones de una página.

  2. En el código de la página, llame al método AddFileDependency. Como parámetro filename del método, pase la ruta de acceso del archivo en el que esté creando una dependencia.

    En el siguiente ejemplo de código se establece una dependencia de archivos en el archivo TextFile1.txt. Cuando cambie el archivo, se eliminará de la memoria caché el resultado de la página.

    protected void Page_Load(object sender, EventArgs e)
    {
        string fileDependencyPath = Server.MapPath("TextFile1.txt");
        Response.AddFileDependency(fileDependencyPath);
    
        // Set additional properties to enable caching.
        Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
        Response.Cache.SetCacheability(HttpCacheability.Public);
        Response.Cache.SetValidUntilExpires(true);
    }
    
    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As EventArgs) Handles Me.Load
        Dim fileDependencyPath As String = _
            Server.MapPath("TextFile1.txt")
        Response.AddFileDependency(fileDependencyPath)
    
        ' Set additional properties to enable caching.
        Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))
        Response.Cache.SetCacheability(HttpCacheability.Public)
        Response.Cache.SetValidUntilExpires(True)
    End Sub
    
    Nota:

    No se pueden utilizar estos métodos desde un control de usuario ASP.NET. Sin embargo, en cualquier control de usuario que especifica la directiva @ OutputCache se puede crear una dependencia de archivos y asignarla a la propiedad Dependency.

Para hacer que el resultado de la página en memoria caché dependa de un grupo de archivos

  1. Especifique las opciones para almacenar el resultado de la página en caché, ya sea de forma declarativa o mediante programación. Para obtener más información, vea Cómo: Establecer los valores de caducidad del almacenamiento en caché de páginas ASP.NET, Establecer el almacenamiento en caché de una página y Almacenar en memoria caché varias versiones de una página.

  2. En el código de la página, cree una matriz de String o un objeto ArrayList que contenga las rutas de acceso de los archivos de los que dependerá la página.

  3. Llame al método AddFileDependencies y pase la matriz como parámetro filenames.

    En el siguiente ejemplo de código se crea una matriz de cadenas de las rutas de acceso para los archivos TextFile1.txt y XMLFile1.xml, y se hace que el resultado de la página dependa de ambos archivos. Si se modifica cualquiera de los archivos, se eliminará de la memoria caché el resultado de la página.

    protected void Page_Load(object sender, EventArgs e)
    {
        string[] fileDependencies;
        string fileDependency1 = Server.MapPath("TextFile1.txt");
        string fileDependency2 = Server.MapPath("XMLFile1.xml");
        fileDependencies = new String[] { fileDependency1, 
            fileDependency2 };
        Response.AddFileDependencies(fileDependencies);
    }
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim fileDependencies() As String
        Dim fileDependency1 As String = Server.MapPath("TextFile1.txt")
        Dim fileDependency2 As String = Server.MapPath("XMLFile1.xml")
        fileDependencies = New String() {fileDependency1, _
            fileDependency2}
        Response.AddFileDependencies(fileDependencies)
    End Sub
    

Vea también

Tareas

Cómo: Establecer el almacenamiento en caché de una página mediante programación

Conceptos

Almacenar en caché páginas ASP.NET

Establecer el almacenamiento en caché de una página