Memorizzazione nella cache dell'output di pagine con dipendenze di file

Le pagine aggiunte alla cache di output vengono rimosse quando il periodo di tempo specificato nel criterio di scadenza è terminato. Talvolta, però, è necessario rimuovere una pagina dalla cache di output prima della scadenza. A tal fine, è possibile utilizzare il metodo HttpResponse.AddFileDependency per rendere la pagina memorizzata nella cache dipendente da un solo file o il metodo HttpResponse.AddFileDependencies per rendere la pagina memorizzata nella cache dipendente da un gruppo di file rappresentati da un oggetto ArrayList.

Se ad esempio si utilizzano file XML come archivi dati per la pagina, sarà possibile creare un ArrayList che contenga i nomi di tutti i file utilizzati dalla pagina. Sarà quindi possibile chiamare AddFileDependencies per rendere la pagina dipendente da tale ArrayList. Al modificarsi di uno qualsiasi dei file XML, la pagina verrà rimossa dalla cache di output e, alla successiva richiesta, verrà generata una nuova pagina.

Nota   Non è possibile utilizzare questi metodi da un controllo utente Web Form.

Nota   È possibile rimuovere in modo esplicito una pagina dalla cache di output chiamando il metodo HttpResponse.RemoveOutputCacheItem. Tale chiamata può essere effettuata dal file global.asax, da un controllo server ASP.NET personalizzato o da una pagina, a seconda delle esigenze dell'applicazione.

Per rendere l'output di una pagina memorizzata nella cache dipendente da un file

  1. Specificare le impostazioni per memorizzare nella cache l'output della pagina, in modo dichiarativo o a livello di programmazione. Per ulteriori informazioni, vedere Impostazione di scadenze per la memorizzazione di pagine nella cache, Impostazione del valore di memorizzazione nella cache di una pagina e Memorizzazione nella cache di più versioni di una pagina.

  2. Nel blocco di dichiarazione del codice o nel file di codice sottostante che accompagna la pagina, creare un oggetto String. Tale oggetto verrà passato come argomento del parametro di una chiamata del metodo AddFileDependency.

    static string filePath;
    [Visual Basic]
    Shared filePath As [String]
    
  3. Nel metodo Page_Load, o in un altro metodo del ciclo di vita della pagina ASP.NET, impostare la stringa creata nel passaggio 2 sul percorso assoluto del file dipendente con il metodo HttpServerUtility.MapPath.

    filePath = Server.MapPath("authors.xml");
    [Visual Basic]
    filePath = Server.MapPath("authors.xml")
    
  4. Nello stesso metodo del ciclo di vita della pagina utilizzato nel passaggio 3, accedere alla sintassi della proprietà Response per chiamare il metodo AddFileDependency, passandogli l'oggetto String creato nel passaggio 2 come parametro filename.

    Response.AddFileDependency(filePath);
    [Visual Basic]
    Response.AddFileDependency(filePath)
    

Per rendere l'output di una pagina memorizzata nella cache dipendente da un gruppo di file

  1. Specificare le impostazioni per memorizzare nella cache l'output della pagina, in modo dichiarativo o a livello di programmazione. Per ulteriori informazioni, vedere Impostazione di scadenze per la memorizzazione di pagine nella cache, Impostazione del valore di memorizzazione nella cache di una pagina e Memorizzazione nella cache di più versioni di una pagina.

  2. Nel blocco di dichiarazione del codice o nel file di codice sottostante che accompagna la pagina, creare un oggetto ArrayList contenente i nomi dei file dipendenti.

    ArrayList depAL = new ArrayList();
    depAL.Add(Server.MapPath("authors.xml"));
    depAL.Add(Server.MapPath("products.xml"));
    [Visual Basic]
    Dim depAL As New ArrayList()
    depAL.Add(Server.MapPath("authors.xml"))
    depAL.Add(Server.MapPath("products.xml"))
    
  3. In uno dei metodi del ciclo di vita della pagina, quale Page_Load, utilizzare la sintassi dell'oggetto Response per chiamare il metodo AddFileDependencies, passando l'oggetto ArrayList creato nel passaggio 2 come parametro filenames.

    Response.AddFileDependencies(depAL);
    [Visual Basic]
    Response.AddFileDependencies(depAL)
    

Nell'esempio che segue viene utilizzato il metodo AddFileDependency per rendere la pagina memorizzata nella cache dipendente da un file XML, authors.xml. Dopo la richiesta, la pagina verrà memorizzata nella cache di output per 100 secondi. Se però il file XML viene modificato prima che sia trascorso tale periodo, l'output della pagina verrà rimosso dalla cache. Al successivo accesso alla pagina, ne verrà memorizzata una nuova versione nella cache di output. Per provare tale funzionamento, aggiungere manualmente un'altra voce al file XML dopo aver richiesto la pagina, quindi aggiornare la pagina sul browser.

<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Data" %>
<%@ OutputCache duration="100" varybyparam="false" %>
<html>
  <script language="C#" runat="server">

    static String filePath;

    void Page_Load(Object Src, EventArgs E ) {

      filePath = Server.MapPath("Authors.xml");
      Response.AddFileDependency(filePath);
      LoadData();

      TimeMsg.Text = DateTime.Now.ToString("G");

    }
  
    void LoadData() {

        // Read the data from the XML source.
        DataSet ds = new DataSet();

        FileStream fs = new FileStream(Server.MapPath("authors.xml"), FileMode.Open,FileAccess.Read);
        StreamReader reader = new StreamReader(fs);
        ds.ReadXml(reader);
        fs.Close();

        // Create a DataView object to bind to 
        // the DataGrid on the page.
        DataView Source = new DataView(ds.Tables[0]);

       // Bind the Source to the DataGrid on the page.
      MyDataGrid.DataSource = Source;
      MyDataGrid.DataBind();
    }
  </script>
  <body>

    <form runat="server">

      <h3><font face="Verdana">File Dependencies</font></h3>

      <ASP:DataGrid id="MyDataGrid" runat="server"
        Width="300"
        BackColor="#ccccff"
        BorderColor="black"
        ShowFooter="false"
        CellPadding=3
        CellSpacing="0"
        Font-Name="Verdana"
        Font-Size="8pt"
        HeaderStyle-BackColor="#aaaadd"
      />
            <p>
      <i>Last generated on:</i> <asp:label id="TimeMsg" runat="server" />
    </form>
  </body>
</html>

[Visual Basic]
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Data" %>
<%@ OutputCache duration="100" varybyparam="false" %>
<html>

  <script language="VB" runat="server">
   ' Create a string to pass to AddFileDependency.
    Shared filePath As [String]


    Sub Page_Load(Src As [Object], E As EventArgs)
   
     ' Assign the string the absolute path to the
     ' dependent file, then pass it to AddFileDependency.
     filePath = Server.MapPath("Authors.xml")
     Response.AddFileDependency(filePath)
   
     ' Call this function to display XML data in the page.
     LoadData()
   
     TimeMsg.Text = DateTime.Now.ToString("G")
    End Sub 'Page_Load

   Sub LoadData()
   
     ' Read the data from the XML source.
     Dim ds As New DataSet()
   
     Dim fs As New FileStream(Server.MapPath("authors.xml"), FileMode.Open, FileAccess.Read)
     Dim reader As New StreamReader(fs)
     ds.ReadXml(reader)
     fs.Close()
   
     ' Create a DataView object to bind to 
     ' the DataGrid on the page.
     Dim [Source] As New DataView(ds.Tables(0))
   
     ' Bind the Source to the DataGrid on the page.
     MyDataGrid.DataSource = [Source]
     MyDataGrid.DataBind()
   End Sub 'LoadData
  </script>

  <body>
    <form runat="server">

      <h3><font face="Verdana">File Dependencies</font></h3>

      <ASP:DataGrid id="MyDataGrid" runat="server"
        Width="300"
        BackColor="#ccccff"
        BorderColor="black"
        ShowFooter="false"
        CellPadding=3
        CellSpacing="0"
        Font-Name="Verdana"
        Font-Size="8pt"
        HeaderStyle-BackColor="#aaaadd"
      />
<p>
      <i>Last generated on:</i> <asp:label id="TimeMsg" runat="server" />
    </form>
  </body>
</html>

Di seguito è riportato il contenuto del file authors.xml.

<NewDataSet>
  <Table>
    <au_id>172-32-1176</au_id>
    <au_lname>White</au_lname>
    <au_fname>Johnson</au_fname>
  </Table>
  <Table>
    <au_id>213-46-8915</au_id>
    <au_lname>Green</au_lname>
    <au_fname>Marjorie</au_fname>
  </Table>
</NewDataSet>

Vedere anche

Memorizzazione nella cache di pagine ASP.NET | Enumerazione HttpCacheability | Classe HttpCachePolicy | Classe HttpResponse | @ OutputCache