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

Dotnet Discussion :

Une classe accessible par différents projets avec sauvegarde de l'état


Sujet :

Dotnet

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Une classe accessible par différents projets avec sauvegarde de l'état
    Bonjour à tous.
    Je ne sais trop où poster ce message car il concerne .NET dans mon cas, mais je pense que là où je peche c'est plutôt dans mon pattern.

    J'ai une application web.

    Je souhaite mettre dans une liste tous les mecs qui se connectent et ainsi stocker leur ID + IP.

    Pour ce faire j'ai créé un projet bibliothèque où dedans j'ai une classe static avec ma liste en static volatile et des fonctions effectuant des opérations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
        public static class TESTSESSION
        {
            public volatile static List<SessionManagerDataAccess.SampleUser> LsSessions;
     
            public static void FonctionTest()
            {
                string maman = "Papa";
     
                LsSessions.Add(new SessionManagerDataAccess.SampleUser
                {
                    Id = new Guid(),
                    Ip = "127.0.0.1",
                    IsOnLine = true,
                    LastConnection = DateTime.Parse("2012-01-30 12:23:56.253")
                });
            }
     
            public static void InitList()
            {
                if (LsSessions == null)
                {
     
                    LsSessions = new List<SessionManagerDataAccess.SampleUser>();
                }
            }
     
            public static void AddUserToSession(SessionManagerDataAccess.SampleUser user)
            {
                Console.WriteLine("USERS IN SESSION : {0}", LsSessions.Count);
                LsSessions.Add(user);
                Console.WriteLine("YOU SUCCESSFULLY ADD A NEW USER TO THE SESSION {0}", user.Id);
                Console.WriteLine("USERS IN SESSION : {0}", LsSessions.Count);
            }
        }
    Mon projet web a une référence à ce projet, et des qu'il y a une connexion il ajoute les infos.
    Jusque là c'est ok!

    Par contre il me faudrait un thread qui toutes les 20 minutes vienne checker cette liste et vienne voir les utilisateurs inactifs.
    Bref là c'est mon problème c'est fonctionnel.

    C'est un autre projet console, qui a mon projet avec ma classe TESTSESSION en référence.
    Il arrive comme l'autre à accéder à la classe et à la modifier, mais par contre il voit pas ce que mon site web a fait comme ajout.

    Je sais que certains diront "mais c'est normal, ce sont deux instances différentes et blah et blah..."
    Mais expliquez moi, déjà d'une pourquoi, et de deux comment faire pour faire ça!

    Vous comprenez ma problématique??

    En gros comment créer une classe qui serait encore plus que static car quelle que soit le projet qui la modifie, ces modifs soient visibles par d'autres projets qui l'appellent.

    Merci d'avance car là mes notions d'architectes me font défaut

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par hinsano Voir le message
    C'est un autre projet console, qui a mon projet avec ma classe TESTSESSION en référence.
    Il arrive comme l'autre à accéder à la classe et à la modifier, mais par contre il voit pas ce que mon site web a fait comme ajout.

    Je sais que certains diront "mais c'est normal, ce sont deux instances différentes et blah et blah..."
    Mais expliquez moi, déjà d'une pourquoi, et de deux comment faire pour faire ça!
    Tu es dans deux process différents, ce qui est une raison suffisante pour avoir deux "instances" (le terme est ici inapproprié, car classe statique, disons "copie" plutôt) dans la mémoire de la machine; Raison suffisante, mais non nécessaire, car il suffit d'être dans deux AppDomain différents dans le même Process pour avoir le même effet (isolation des "copies" des classes statiques) : par exemple deux applications web qui utiliseraient cette classe, sur le même serveur IIS.

    Les possibilités de contournement sont multiples :

    - Mettre cette classe non pas dans une application web mais dans un web service (ou un service) qui exposera les méthodes "d'inscription" et "désinscription" des utilisateurs et une autre de lecture. Les premières méthode seront appelées par ton application web, la deuxième par ton projet console de consultation.

    - plutot que d'interroger ta liste en mémoire, écrire les infos dans la base de données (en prévoyant une procédure de remise à zero au redémmarage du web service).

    - persister ta classe dans un fichier XML à chaque modification, la réinstancier dans ton projet console (pour cela, remplacer la classe statique par un singleton) ou alors garder la classe statique et persister la liste à chaque modification (équivalent).

    - il existe une autre possibilité via l'utilisation d'un pool de mémoire partagée, mais c'est nettement moins trivial à implémenter que les autres (de plus il faut passer par du C++/CLI, sauf erreur de ma part).

    - aussi d'autres possibilités un peu exotiques via les Named Pipes, mais qui vont compliquer les choses inutilement.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci BlueDeep.

    Le problème dans ces cas là c'est que t'as tellement le nez dedans, que tu en oublies les bases...
    Je vais opter pour le webservice, je vais tester ça dans les heures qui viennent.

    Pour ce qui est de la sérialisation xml tu as raison ce serait une solution, mais j'aimerais éviter dans mon cas précis.

    En tout cas merci d'avoir pris le temps de répondre quelque chose de bien écrit et de clair! C'est appréciable.

    Je reposterai pour valider que ça a marché.

    Adrien

  4. #4
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    Bonsoir,

    D'apres les informations que tu viens de donner sur ton post, tu te retrouves dans le besoin de créer :
    - Une classe static accessible par tous les "mecs" qui se connecte
    - Une vérification toutes les 20 minutes

    Je pense que la solution fonctionnelle a ton probleme reside dans ceci:
    - Un web service qui permet d'acceder a ta classe static
    - Un windows service installé sur ton hebergeur pour qui va lancer un thread toutes les 20 minutes pour verifier ce qui doit etre verifié
    - Sécuriser ton web service pour pour limiter l'acces aux "mecs" concernés, ceci peut se faire naturellement avec Membership

    ps: c'est une solution un peu difficile à mettre en oeuvre, mais c'est la plus professionnelle qui soit, un exmple dans le lien suivant ici
    If you type Google into Google, you Can break the internet" - The IT Crowd

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Je confirme.

    Mettre ma classe static accessible via le webservice marche très bien.

    C'est logique, c'est propre, c'est 21ème siècle, bref c'est nickel!

    Mon projet Console Windows y accède très bien, et en plus il voit très bien tout ce que mon petit site web à mis comme infos.

    Merci à vous deux!

    Prochaine étape : le Service Windows!

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

Discussions similaires

  1. Une classe accessible par pluieurs programmes
    Par brad1024 dans le forum C++
    Réponses: 7
    Dernier message: 29/05/2008, 23h28
  2. Réponses: 1
    Dernier message: 20/03/2008, 09h40
  3. Connection et différentes actions dans une BDD access par WINSOCK
    Par muzele dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 21/08/2007, 18h34
  4. Variable accessible par différentes classe
    Par jbidou88 dans le forum Langage
    Réponses: 6
    Dernier message: 03/05/2006, 10h27
  5. Réponses: 3
    Dernier message: 24/10/2005, 10h07

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