IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web avec .NET Discussion :

Mise à jour [données] [GridView] en temps réel


Sujet :

Développement Web avec .NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Mise à jour [données] [GridView] en temps réel
    Bonjour,
    sur une page aspx, j'ai un GridView lié à une Datasource, qui elle obtient ses données d'une Instruction Select sur une Requête dans une base de données SQL Express 2008.
    Les données de la Datasource sont mis en cache par les instructions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EnableCaching="True"  et SqlCacheDependency="extranet:xT_Lots"
    et les instructions caching dans le fichier web.config qui vont avec.

    Le cache est donc mis à jour si la table xT_Lots est modifié, mais les données modifiés ne se répercutent sur mon GridView uniquement après un refresh de la page, mais j'aimerais que ces modifications se reflètent dans le GridView en temps réel.

    Y a t'il par exemple un moyen de détecter l'évènement "mise à jour du cache", et à partir de la, déclencher un refresh du GridView ?

    Merci de votre aide.

    Peter

  2. #2
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Bonjour,

    Cela revient à ce qu'un évènement serveur puisse envoyer un message à un client pour lui dire de se mettre à jour. Étant donné qu'on parle d'un site web, donc du protocole HTTP, ce n'est pas du tout évident.

    Il me semble qu'un message sur ce forum ce mois-ci parlait d'un projet disponible sur Codeplex permettant de réaliser cela.
    A défaut il faudrait en javascript mettre en place un listener qui puisse intercepter le message du serveur pour provoquer un postback...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Citation Envoyé par peter2587 Voir le message

    Le cache est donc mis à jour si la table xT_Lots est modifié, mais les données modifiés ne se répercutent sur mon GridView uniquement après un refresh de la page, mais j'aimerais que ces modifications se reflètent dans le GridView en temps réel.

    Y a t'il par exemple un moyen de détecter l'évènement "mise à jour du cache", et à partir de la, déclencher un refresh du GridView ?


    Peter
    Cette méthode, compatible uniquement Sql Serveur il me semble, permet de mettre en cache les données uniquement coté serveur. Le client n'a même pas conscience ça.

    Rafraîchir un client sans demande de celui-ci n'est pas compatible avec les technos web aujourd'hui. Si on parle de client et de serveur, c'est bien parce qu'il y a un sens unique de communication. Qu'un serveur puisse initier une connexion vers un client type navigateur relève de l'utopie.

    La technique la plus utilisée aujourd'hui pour metter à jour automatiquement les pages des clients est via des requêtes AJAX excutées regulièrement de manière invisible pour le client.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Bon, je ne suis pas un spécialiste des technologies .NET, mais dans mon fichier web.config, j'ai l'instruction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <caching>
                <sqlCacheDependency enabled="true" pollTime="500">
                    <databases>
                        <add name="extranet" connectionStringName="ExtranetConnectionString"/>
                    </databases>
                </sqlCacheDependency>
            </caching>
    J'ai aussi crée la dépendance de cache avec la table xT_Lots dans ma base de données SQL, par l'instruction aspnet regsql : (ici exemple msdn, le mien est adapté à mon cas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aspnet_regsql.exe -S <Server> -U <Username> -P <Password> -ed -d Northwind -et -t Employees
    Si je comprends bien tout ca, l'application est en train de poller le serveur tout les 500 millisecondes, pour tester si le cache à été changé.

    Il doit bien avoir un moyen de récupérer l'info, si oui ou non un changement du cache a eu lieu, et créer une action à partir de la ?

    Est ce que quelqu'un peut m'aiguiller dans ce sens ?

    Merci d'avance
    Peter

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Dans l'exemple que tu donnes, tu as créer une dépendance du cache entre la BDD et l'application web.
    Le problème de ce que tu veux faire, est qu'il est impossible au serveur de contacter un client spécifique pour lui indiquer la maj.
    Encore une fois, il vaut mieux mettre en place coté client, une mécanique de requête régulièrement le serveur pour mettre à jour la page.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Pour moi, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <sqlCacheDependency enabled="true" pollTime="500">
    signifie que le client vérifie tous les 500 millisecondes si les données en cache sur le serveur ont changé.
    C'est donc bien le client qui agit, et non le serveur.
    Ce que j'aimerais faire, ce qu'une fois le client a constaté que le cache a changé, faire exécuter une action au client, en occurrence un refresh du GridView qui dépend des données en question.
    En cherchant j'ai trouvé un lien qui parle de SQL Query Notification :
    http://www.code-magazine.com/article...printmode=true

    Je cite
    ... Query Notification allows you to cache data and be notified when the data has been changed in SQL Server. Upon notification, you can then refresh your cache or take whatever action you need to.
    Je pense que ca correspond à ma demande, mais comme déjà mentionné, je ne suis pas spécialiste du .NET, je vais peiner un peu pour dépouiller tout ca et l'adapter à mon appli. Je donnerai une retour quand j'aurais réussi.

    Si quelqu'un à déjà appliqué cette méthode, je suis toujours preneur de conseils ou codes.
    Peter

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Attention à la définition de "Client".

    sqlCacheDependency représente une dépendance du client envers la BDD cible. Dans ton cas ce "client" est en réalité l'application ASPNET.
    Mais ton site est bien évidemment aussi un serveur, consommé par d'autres clients, les navigateurs.

    La solution que tu cites s'adresse aux WinForms.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Ok, je vois. Je me suis emmêle les pinceaux en raisonnant comme pour une application Access, ou effectivement l'execution du code se fait sur la machine client, mais dans le cas présent, le client physique ne fait qu'afficher ce qui se passe sur le serveur.
    Merci pour tes éclaircissements, je vais donc me tourner vers Ajax ou Javascript.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. mise à jour données externes
    Par danest dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/04/2008, 18h13
  2. Comment mettre à jour une Progressbar en temps réel ?
    Par colorid dans le forum Composants VCL
    Réponses: 7
    Dernier message: 31/01/2008, 12h21
  3. [Swing][JTable] Mise à jour données
    Par [Nean] dans le forum Composants
    Réponses: 1
    Dernier message: 04/05/2007, 09h21
  4. [VBA-E] Mise à jour données externes
    Par Sebastien_INR59 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/06/2006, 17h11
  5. Access Problème avec mise à jour données
    Par Yanmeunier dans le forum Access
    Réponses: 2
    Dernier message: 30/03/2006, 16h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo