6/19/11

PROFILES ASP.NET 2.00


1. Profiles

1.1.         Introduction aux Profiles

Plusieurs façons de stocker les informations des utilisateurs sont envisageable telles que les sessions, les cookies utilisés principalement jusque là pour garder une trace d’un visiteur ou pouvoir stocker des informations tel qu’un panier, un nom. Cependant ces solutions requierent un minimum de code de la part du développeur. ASP.NET intègre une nouvelle solution, les Profiles, se basant sur une base de donnée (SQL Server, Access, Oracle…) et permet de stocker des informations permanant et automatiquement. Cette nouvelle fonctinnalité de nécessite aucun code pour le stockage, ASP.NET se charge de cette fonction et modifie à chaque fois la base de donnée. De plus, les Profiles permettent de stocker des informations à long terme, souvent associées à l’Authentification des utilisateurs dans les applications WEB.
L’utilisation des Profiles sera détaillée uniquement avec une base de donnée SQL Server ainsi que l’installation des Profiles par l’intermédiaire de l’application aspnet_regsql.exe de Microsoft, intégré dans le Framework 2.0.

1.2.         Implémentation des Profiles

Microsoft met à disposition un executable permettant d’installer les Profiles (de même pour l’utilisation des Membership et Roles) dans une base de donnée.
Cette executable se trouve dans le chemin suivant : C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxx\aspnet_regsql.exe
Il vous suffit de lancer le programme, choisir si vous voulez créer une nouvelle base (ASPNETDB sera le nom de la base par défaut) ou installer tous les composants dans une base existante.
profiles_imple1.png
Fig 4.1 Installation aspnet_regsql.exe
Voici les nouvelles tables installés :
profiles_imple2.png
Fig 4.2 Tables installées
Et les procédures stockées concernant les Profiles :
profiles_imple3.png
Fig 4.3 Procédures pour les Profiles

1.3.         Description des tables et procédures

L’utilisation des Profiles nécessite une base de donnée stockant les informations grâce à des procédures stockées. Quelque soit la procédure d’installation des Profiles, vous tomberez sur le même schèma de base de donnée.
Table
Description
aspnet_Applications
Informations concernant toutes les application WEB disponibles
aspnet_Users
Informations concernant tous les utilisateurs (status de connexion, dernière connexion…). Relié à un ou plusieurs Profile et une application.
aspnet_Profile
Informations concernent les Profiles de plusieurs utilisateurs avec la dernière date de modification
profiles_imple4.png
Fig 4.4 Structure des tables Profiles
Procédures
Description
aspnet_Profile_DeleteInactiveProfiles
Supprime les profiles inactifs selon une durée à spécifier
aspnet_Profile_DeleteProfiles
Supprime les Profiles selon les utilisateurs
aspnet_Profile_GetNumberOfInactiveProfiles
Récupère le nombre de Profiles inactifs depuis un certain temps (à spécifier)
aspnet_Profile_GetProfiles
Permet de récuperer des informations sur les Profiles, tel que le propriétaire utilisateur, la dernière date de modification
aspnet_Profile_GetProperties
Permet de récuperer le contenu d’un Profile selon le nom de l’utilisateur
aspnet_Profile_SetProperties
Permet de modifier un Profile selon l’utilisateur

1.4.         Mise en place des Profiles

Les Profiles se définissent de le fichier de configuration de l’application WEB, le fichier XML web.config, entre les balises system.web.
<?xml version="1.0"?>
<configuration>
     <appSettings/>
     <connectionStrings/>
     <system.web>
           <compilation debug="true"/>
           <authentication mode="Windows"/>

           <profile defaultProvider="">
                 <providers>
                 ...
                 </providers>
                 <properties>
                 <add ... />
                 </properties>    
           </profile>

     </system.web>
  </configuration>
L’utilisation des Profiles est associée à un Provider (Profile Provider), donc une base de donnée. En l’occurrence, vous avez la possibilité de choisir un Provider par defaut, c'est-à-dire le Provider définit dans le champs ConnectionString du fichier web.config, ou de définir vous-même le provider entre les balises Provider.
La balise Properties permet de définir les informations qui seront stockées dans la base de donnée, voici les propriétés de la balise Add:
Propriétés
Description
Name
Nom de la propriété, auquel on pourra accéder dans le code-behind
allowAnonymous
Booleen, autorisé l’utilisation de cette propriété pour les utilisateurs avec un Profile anonyme
Type
Le type de la propriété (String, Integer, …)
Provider
Le Provider associé
serializeAs
Le type de serialisation (String, Binary, …)
readOnly
Propriété en mode lecture uniquement
DefaultValue
La valeur par défaut de la propriété
Group
Ordonner les propriétés par groupe
Voici un exemple de Profile :
<profile enabled="true">
      <providers>
        <add name="AspNetSqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="xxx"></add>
      </providers>
      <properties>
        <add name="panier" allowAnonymous="true" type="Cart" provider="AspNetSqlProvider" serializeAs="Binary"/>
        <add name="destinataire" allowAnonymous="true" type="Destinataire" provider="AspNetSqlProvider" serializeAs="Binary"/>
      </properties>
    </profile>
Dans cet exemple, les type « Cart » et « Destinataire » sont des classes.

1.5.         Ajouter / Modifier les propriétés

Une fois les propriétés des Profiles misent en place dans le fichier web.config, vous allez pouvoir stocker des données dans un Profile. Attention, si vous souhaitez stocker des informations dans un Profile anonyme, il faut activer les utilisateurs anonyme dans le fichier web.config.
<anonymousIdentification enabled="true"/>
L’accès au propriété du profile en code-behind (C#) se fait de cette manière :
Profile.[propriete] = [valeur];
Voici un exemple :
Le fichier web.config :
<?xml version="1.0"?>
<configuration>
     <appSettings/>
     <connectionStrings>
  <add name="testConnectionString" connectionString="Data Source=JUN\SQLExpress;Initial Catalog=test;Integrated Security=True"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
     <system.web>
           <compilation debug="true"/>
           <authentication mode="Windows"/>
    <pages theme="test"/>

    <anonymousIdentification enabled="true"/>
    <profile enabled="true">
      <providers>
        <add name="AspNetSqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="testConnectionString"></add>
      </providers>
      <properties>
        <add name="age" allowAnonymous="true" type="Integer" provider="AspNetSqlProvider" serializeAs="String"  />
      </properties>
    </profile>
     </system.web>
  </configuration>
Le fichier test.aspx :
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        Age&nbsp;<asp:TextBox ID="TxtBox_Age" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="Button_validate" runat="server" Text="Valider" OnClick="Button_valide_Click" /><br />
        <br />
    </div>
    </form>
</body>
</html>
Le fichier test.aspx.cs :
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
       
    }
    protected void Button_valide_Click(object sender, EventArgs e)
    {
        Profile.age = Convert.ToInt32(TxtBox_Age.Text);
    }
}
profiles_define3.png
Fig 4.5 Exemple stockage information
Le contenu de la table aspnet_Profile avant validation :
profiles_define1.png
Fig 4.6 Tables aspnet_Profile avant validation
Le contenu de la table aspnet_Profile après validation :
profiles_define2.png
Fig 4.7 Tables aspnet_Profile après validation
Pour récuprer cette donnée, il suffit de la récupérer dans un Label ou autre contrôle avec ce bout de code :
… = Profile.age;

1.6.         Les différents type de sérialisation

Les informations sont sérialisées puis stockés dans un Profile. Quatres type de sérialisations sont disponibles :
Type
Description
Symbole
String
Converti en String
S
Binary
Converti en Binaire
B
Xml
Converti en Xml
X
ProviderSpecific
Converti selon le type du Provider
P
La propriété « PropertyNames » a une structure permettant de reconnaître les différentes propriétés du Profile enregistré. Sa structure est composée du nom de la propriété enregistrée, du type de serialisation, le début de la chaîne concerné, la taille de la chaîne :
Nom_propriété:type_serialisation:debut_chaîne:taille_chaîne
S’il existe plusieurs propriétés, elles sont toutes concaténées.

1.7.         Les groupes de propriétés

Les groupes de propriétés permettent de regrouper les propriétés à stocker dans la base de donnée selon leur fonction ou type, permettant d’ordonner le Profile si celui-ci est composé d’une multitude de propriétés. Cela permet aussi d’avoir le même nom de propriété dans chaque groupe puisque par défaut, une propriété est unique ou par groupe.
Voici un exemple de Profile « groupé » :
<profile enabled="true">
      <providers>
        <add name="AspNetSqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="testConnectionString"></add>
      </providers>
      <properties>
        <group name="Students">
          <add name="Campus_ID" />
          <add name="Nom" />
          <add name="Prénom" />
          <add name="Région" />
          <add name="Promo" />
          <add name="Pole" />
        </group>
      </properties>
    </profile>
Pour accéder aux propriétés, il suffit de spécifier le groupe, par exemple :
… = Profile.Students.Nom;

1.8.         Conclusion

Cette nouvelle fonctionnalité permet ainsi de stocker automatiquement et permanant des informations dans une base de donnée. Bien entendu, les développeurs préfèreront développer eux-mêmes le stockage d’information temporaire ou à long terme, cependant la solution des Profiles de Microsoft permet une implémentation simple et rapide.
Si vous souhaitez migrer un Profile Anonyme vers un Profile Connecté (par exemple pour un panier) il faut créer un fichier Global.asax comme cet exemple :
<%@ Application Language="C#" %>

<script runat="server">

        void Profile_MigrateAnonymous(Object sender, ProfileMigrateEventArgs pe)
    {
        // vous ajoutez toutes les propriétés à migrer

        Profile.panier = Profile.GetProfile(pe.AnonymousID).panier;
        Profile.destinataire = Profile.GetProfile(pe.AnonymousID).destinataire;

       // on supprimer le profile anonyme
        AnonymousIdentificationModule.ClearAnonymousIdentifier();

    }
      
</script>

0 التعليقات:

Post a Comment

Related Posts Plugin for WordPress, Blogger...