Comment : Implémenter les dépendances basées sur les clé de données de mise en cache dans ASP.NET à l’aide de Visual C# .NET

Pour obtenir une version Microsoft VB .NET de cet article, reportez-vous à la section.
312358 .

Cet article fait référence aux espaces de noms bibliothèque de classes Microsoft.NET Framework suivant :
  • System.Web.Caching
  • System.Web.SessionState
  • System.Data.SqlClient

DANS CETTE TÂCHE.

Résumé

Cet article explique comment implémenter la mise en cache des données dans une application Microsoft ASP.NET à l’aide des dépendances basées sur une clé. L’exemple présenté dans cet article crée et insère un objet de groupe de données dans le cache avec une dépendance définie sur un autre élément d’entrée de cache en référençant sa clé. Pour obtenir des exemples de mise en cache avec le temps ou des dépendances basées sur le fichier de données, reportez-vous à la section « Références » de cet article.

Configuration requise

  • Microsoft Windows 2000 ou Microsoft Windows XP
  • Microsoft Internet Information Server (IIS)
  • Microsoft.NET Framework
  • Microsoft SQL Server

Créer une Application Web d’ASP.NET

Microsoft Visual C# .NET permet de créer une application Microsoft ASP.NET Web nommée DataCacher :
  1. Ouvrez Microsoft Visual Studio .NET.
  2. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.
  3. Dans la boîte de dialogue Nouveau projet , cliquez sur Projets Visual C# sous Types de projets, puis cliquez sur ASP.NET Web Application sous modèles.
  4. Dans la zone emplacement , tapez DataCacher comme nom du projet, en remplaçant le nom par défaut WebApplication # dans le chemin d’accès de l’URL. Si vous utilisez le serveur local, vous pouvez laisser le nom du serveur sous la forme http://localhost, qui définit l’emplacement de http://localhost/DataCacher.

Créer le formulaire Web

Remarque: le code qui est inclus dans cette section est expliqué plus en détail dans la section « En cours d’exécution du Code ».

Pour générer les exemples de mise en cache de données :
  1. Ajoutez un nouveau formulaire Web nommé DataCacheSample.aspx à votre projet dans Visual Studio .NET :
    1. Cliquez droit sur le nœud du projet dans l’Explorateur de solutions.
    2. Cliquez sur Ajouter, puis cliquez sur Ajouter un nouveau formulaire de Web.
    3. Nom du DataCacheSample.aspx de formulaire Web.
    4. Cliquez sur Ouvrir.
  2. Sous l’onglet vue de Création pour le Web Form dans le l’environnement Visual Studio .NET IDE (environnement de développement intégré), ajoutez un bouton de formulaire Web à la page :
    1. Utilisez une opération de glisser-déplacer pour déplacer un bouton de formulaire Web sur la page.
    2. Cliquez sur le bouton Nouveau. Modifier la propriété ID à CreateNewOrCached, puis modifiez la propriété Text pour Créer nouveau ou mis en cache.
  3. Ajoutez un deuxième bouton de formulaire Web :
    1. Utilisez une opération de glisser-déplacer pour déplacer un autre bouton de formulaire Web sur la page à partir de la boîte à outils.
    2. Cliquez sur le bouton Nouveau. Modifier la propriété ID pour Supprimeret ensuite modifier la propriété de texte à Supprimer.
  4. Ajouter une étiquette de formulaire Web :
    1. Utilisez une opération de glisser-déplacer pour déplacer un label sur la page du formulaire Web à partir de la boîte à outils.
    2. Cliquez pour sélectionner la nouvelle étiquette. Modifier la propriété ID à CacheStatuset désactivez la propriété de texte .
  5. Utilisez une opération de glisser-déplacer pour déplacer un contrôle de formulaire Web DataGrid sur la page à partir de la boîte à outils. Pour ce contrôle, laissez la propriété d’ID définie sur le paramètre par défaut dans le volet Propriétés DataGrid1 .

Ajoutez le Code

Ajoutez le code pour insérer des éléments du cache, supprimer des éléments du cache et pour construire la dépendance de cache :
  1. Avec le bouton droit de la page .aspx, puis cliquez sur Afficher le Code pour ouvrir la page code-behind.
  2. Pour cet exemple, assurez-vous que le System.Data.SqlClient, le System.Dataet les espaces de noms System.Web.Caching sont ajoutés à l’espace de noms dans la page code-behind. Si vous utilisez Visual Studio. NET pour créer le formulaire Web, votre espace de noms dans la page code-behind sera semblable au suivant :
    using System;using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    using System.Web.Caching;

    Remarque: vous recevrez des avertissements si l’espace de noms n’est pas répertorié, ou si une liste redondante d’un espace de noms existe.
  3. Sur l’onglet du mode Création , double-cliquez sur le bouton CreateNewOrCached pour ouvrir l’événement CreateNewOrCached_Click dans la page code-behind.
  4. Ajoutez le code suivant à l’événement CreateNewOrCached_Click :
    private void CreateNewOrCached_Click(object sender, System.EventArgs e) {//Attempt to create a DataSet object from the cache entry with the key "CacheDataSetEmployees" 
    object CacheDataSetEmployees = (DataSet)Cache.Get("CacheDataSetEmployees");

    //Check to see if the object is null
    if(CacheDataSetEmployees == null)
    {
    //Set a value for the cache entry that will serve as the
    //key for the dependency to be created on
    Cache["SqlPubsEmployees"] = "SomeValue";

    //Create the array of cache key item names
    string[] keys = new String[1];
    keys[0] = "SqlPubsEmployees";

    DataSet ds = new DataSet();
    //Create the connection and pass in the ConnectionString
    SqlConnection MySqlConn = new SqlConnection("Server=kronicas17;Trusted_Connection=Yes;initial catalog=pubs");
    //Create the Data Adapter and pass in the command text and connection to use
    SqlDataAdapter MySda = new SqlDataAdapter("SELECT TOP 10 * FROM Employee", MySqlConn);
    //Populate the DataTable "Employees" in the DataSet
    MySda.Fill(ds,"Employee");
    //Set the DataGrid's DataSource to the "Employee" DataTable
    DataGrid1.DataSource = ds.Tables["Employee"];

    //Create a dependency object referencing the array of cachekeys (keys)
    CacheDependency MyDependency = new CacheDependency(null, keys);
    //Insert the DataSet into Cache with a dependency on MyDependency
    Cache.Insert("CacheDataSetEmployees", ds, MyDependency);
    MySqlConn.Close();

    //Display the status of the DataSet/Cache Entry
    CacheStatus.Text = "New Version Created";
    }
    else
    {
    //Display the status of the DataSet/Cache Entry
    CacheStatus.Text = "Cached Version Used";
    //Set the DataSource to the cached version of the DataSet
    DataGrid1.DataSource = CacheDataSetEmployees;
    }
    //Bind the DataGrid to the DataSource
    DataGrid1.DataBind();
    }

    Remarque: il se pouvez que vous deviez modifier ConnectionString dans le code de cette étape pour fonctionner correctement avec votre serveur SQL. Le code fonctionne correctement, vous devez avoir la base de données SQL Server Pubs installé.
  5. Sous l’onglet Affichage de conception de la page DataCacheSample.aspx, double-cliquez sur le bouton Supprimer pour ouvrir l’événement Remove_Click dans la page code-behind.
  6. Ajoutez le code suivant à l’événement Remove_Click :
    private void Remove_Click(object sender, System.EventArgs e)     {
    //Remove the cache item listed in the cachekeys array (keys)
    Cache.Remove("SqlPubsEmployees"); //Display the status of the cache item
    CacheStatus.Text = "Cache Item Removed";
    }

  7. Ajoutez l’élément suivant au fichier Web.config entre < system.web > et </System.Web > :
    <identity impersonate=”true” />
  8. Dans le menu fichier , cliquez sur Enregistrer tout pour enregistrer le formulaire Web et les autres fichiers projet associés.
  9. Dans le menu Générer dans l’environnement IDE de Visual Studio .NET, cliquez sur Générer pour générer le projet.

Le Code en cours d’exécution

  1. Pour exécuter le code, avec le bouton droit de la page DataCacheSample.aspx dans l’Explorateur de solutions, puis cliquez sur afficher dans le navigateur.
  2. Cliquez sur le bouton CreateNewOrCached ; l’étiquette CacheStatus doit afficher « Nouvelle Version créée » et le contrôle DataGrid est rempli.

    NOTES:
    • Le paramètre de Création de la nouvelle Version de l’étiquette de CacheStatus est le résultat de la clé de cache CacheDataSetEmployees qui ne référence pas encore un élément de cache valide lors de la saisie de l’événement. Dans ce cas, le groupe de données est créé, le contrôle DataGrid est lié au groupe de données, et le groupe de données est entrée dans le cache à l’aide de la clé de cache « CacheDataSetEmployees ».
    • À partir de l’étape précédente vous devez avoir également remarqué la création du nouvel objet CacheDependency nommé MyDependency. L’objet MyDependency est répertorié en tant que la dépendance de l’élément CacheDataSetEmployees lorsqu’il est ajouté au cache à l’aide de la méthode Insert . Il est important de noter que, bien que cet exemple illustre les dépendances basées sur une clé, vous pouvez utiliser des autres types de critères de mise en cache basée sur la dépendance, comme les fichiers ou la date et l’heure, ainsi.
  3. Cliquez de nouveau sur le bouton CreateNewOrCached . L’étiquette CacheStatus affiche « Version mis en cache », ce qui indique que le groupe de données mis en cache a été utilisé. Vous pouvez vérifier qu’il s’agit des données mises en cache en modifiant un des enregistrements affichés dans la base de données Pubs à l’aide de l’Analyseur de requêtes SQL ou un autre outil. Une fois que vous modifiez l’enregistrement, cliquez à nouveau sur le bouton CreateNewOrCached . Notez que les modifications apportées ne sont pas affichées. Cliquez sur Supprimer, puis cliquez sur CreateNewOrCached pour voir les modifications que vous avez apportées à la base de données.
  4. Cliquez sur le bouton Supprimer . L’étiquette CacheStatus affiche « Entrée du Cache supprimée ». L’élément avec la clé de cache
    « SqlPubsEmployees » est supprimée à l’aide de la méthode Cache.Remove dans l’événement Remove_Click . Étant donné que vous avez mis le tableau (qui contient le nom de clé de cache de l’élément supprimé) avec MyDependency lors de sa création, l’élément « CacheDataSetEmployees » est supprimée parce que vous l’avez créé à l’aide de la méthode Insert et en référençant MyDependency comme son paramètre de dépendance.
  5. Cliquez de nouveau sur le bouton CreateNewOrCached . L’étiquette CacheStatus affiche le message « Nouvelle Version créé » car le groupe de données a été créée en se fondant sur le fait qu’il n’existe plus dans le cache lorsque l’événement a été déclenché.
  6. Vous pouvez également remarquer que le contrôle DataGrid est affiché comme rempli de données même après que l’élément de groupe de données est supprimé du cache. C’est le résultat de la propriété EnableViewState est défini sur True par défaut. Ainsi, l’état du contrôle soit conservé, et ceci n’est pas lié à la manipulation d’entrée de cache dans le code. Pour une représentation plus visuelle de l’état du contrôle à chaque phase, vous pouvez définir EnableViewState sur False.
Remarque: en ce qui concerne cet exemple, dans une situation réelle, le tableau de clés de cache (le tableau de clés dans l’exemple de code) peut contenir des clés de cache pour les autres tables ou autre cache les éléments de sorte que si un de ces éléments change, l’entrée de cache (CacheDataSetEmployees dans cet exemple) de l’article qui a été créé avec cette dépendance doit être supprimée du cache ainsi. Vous pourriez puis entreprenez les actions nécessaires à l’aide de rappels ; Pour plus d’informations sur les rappels, reportez-vous à la section « Références » de cet article.

Résolution des problèmes

  • Les noms de clé sont répertoriés dans le tableau de clés de cache doivent être associés à des éléments du cache réel. S’ils ne le sont pas, l’élément pour lequel la dépendance est utilisée n’est pas correctement conservée dans le cache. Un exemple serait si le tableau de clés dans l’exemple de code contient un autre élément de tableau et que l’élément a été défini sur un nom de clé de cache non valide.
  • Le tableau de clés de cache n’a aucune signification spécifique jusqu'à ce qu’il est utilisé avec un objet CacheDependency .
  • Si vous insérez un élément dans le cache avec aucune dépendance ou autre d’expiration, le runtime contrôle lorsque l’élément est supprimé du cache.

Références

Pour plus d’informations sur l’utilisation du délégué CacheItemRemovedCallback délégué, consultez le site Web de Microsoft à l’adresse suivante :Remarque: le délégué CacheItemRemovedCallback définit une méthode de rappel pour avertir les applications lorsqu’un élément mis en cache est supprimé du cache.

Pour plus d’informations sur la classe CacheDependency , consultez le site Web de Microsoft à l’adresse suivante :Remarque: la classe CacheDependency effectue le suivi des dépendances de cache, qui peuvent être des fichiers, répertoires ou clés à d’autres objets dans le cache de votre application.

Pour plus d’informations sur les différentes options de mise en cache qui sont disponibles pour ASP.NET, reportez-vous à la documentation du Kit de développement Microsoft.NET Framework suivante :Pour plus d’informations sur les différentes options de mise en cache qui sont disponibles pour ASP.NET, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :
Introduction à la documentation ASP.NET 305140
307225 Infos : vue d’ensemble de la mise en cache de ASP.NET
Propriétés

ID d'article : 308147 - Dernière mise à jour : 27 janv. 2017 - Révision : 1

Commentaires