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

Windows Forms Discussion :

remoting: initialiser un objet


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Par défaut remoting: initialiser un objet
    Hello

    bon apres mes déboires avec les services j'en ai d'autres avec le remoting...

    voila mon souci, vais essayer d'etre clair:

    j'ai une application qui reçoit via port com ou socket des données. elles stoque ces données dans une base de données

    ce que j'aimerai: avoir une application "cliente" qui va "recuperer" les données que reçoit la premiere appli san spasser par la base de donnée

    donc:

    serveur (reçoit des données) --------------> stoque en BD
    |
    |
    |
    envoi les memes données au client



    donc je voulais utiliser le remoting:

    voici mon code:

    mon interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    namespace IRemote
    {
        public interface IRemote
        {
            string getDernier10Tickets();
        }
    }




    coté serveur: l'objet que j'aimerai partager:

    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
    namespace AutocomScan3Listener
    {
        public class Remote : MarshalByRefObject, IRemote.IRemote
        {
            ArrayList arList= new ArrayList(10);
     
            // Indique que l'objet aura une durée de vie illimitée
            public override object InitializeLifetimeService()
            {
                return null;
            }
     
     
            public void ajouterTicketArrayList(string ticket)
            {
                arList.Add(ticket);
            }
     
            public string getDernier10Tickets()
            {
                string s = "";
                foreach (string a in arList)
                {
                    s += a + "\n";
                }
                return s;
            }
        }

    et le code qui initialise le remoting (toujorus coté serveur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Remote r = new Remote();
     
                TcpServerChannel channel = new TcpServerChannel(9988);
                ChannelServices.RegisterChannel(channel,true);
                RemotingConfiguration.RegisterWellKnownServiceType(
                    typeof(Remote),
                    "Remote", WellKnownObjectMode.Singleton);




    coté client:

    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
    static void Main(string[] args)
            {
                try
                {
                    TcpChannel channel = new TcpChannel();
                    ChannelServices.RegisterChannel(channel, true);
     
                    //RemotingConfiguration.RegisterWellKnownServiceType(typeof(IRemote.IRemote), "tcp://localhost:9988/Remote");
                    IRemote.IRemote Remote = (IRemote.IRemote)Activator.GetObject(typeof(IRemote.IRemote), "tcp://localhost:9988/Remote");
                    while (true)
                    {
                        Console.WriteLine(Remote.getDernier10Tickets());
                        Thread.Sleep(3000);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
                Console.Read();
            }



    voila mon souci

    mon objet Remote que j'ai appelé r doit etre utilisé par plusieurs threads par le serveur. uil contient donc une arraylist que j'aimerai remplir au fur est a mesure...

    or quand j'interroge la methode de l'interface chez le client, je n'ai rien du tout dans l'arraylist!
    ma question est donc la suivante: comment faire dire au remoting que je veux passer CET objet LA bien specifique, deja initialisé et utilisé par d'autres objets du serveur?

    merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Par défaut
    en fait j'ai trouvé une solution

    http://www.developpez.net/forums/sho...light=remoting


    (ça fait 2 jours que je cherchais et j'ai ENFIN trouvé!!!!) YEAHH!

    cette fois j'ai bien mon objet du serveur avec les données dedans et non pas un nouvel objet qui ne contient rien du tout


    COOOOOL

    (ps: si la solution n'est pas bonne n'hesitez pas à me corriger)


    voici donc mon code


    Coté objet partagé:
    --------------------

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    namespace AutocomScan3Listener
    {
        public class Remote : MarshalByRefObject, IRemote.IRemote
        {
            ArrayList arList;
     
            // Indique que l'objet aura une durée de vie illimitée
            public override object InitializeLifetimeService()
            {
                return null;
            }
     
     
            public Remote()
            {
                try
                {
                    arList = new ArrayList(10);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
     
            }
     
     
            public void ajouterTicketArrayList(string ticket)
            {
                arList.Add(ticket);
            }
     
            public string getDernier10Tickets()
            {
                string s = "";
                foreach (string a in arList)
                {
                    s += a + "\n";
                }
                arList.Clear();
                return s;
            }
        }
    }


    L'interface n'a pas changée


    coté serveur: publication de mon objet:
    -------------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Remote r = new Remote();
     
     
    TcpServerChannel channel = new TcpServerChannel(9988);
    ChannelServices.RegisterChannel(channel, true);
     
                /*
    ce que j'avais avant: 
    RemotingConfiguration.RegisterWellKnownServiceType(
                    typeof(Remote),
                    "Remote", WellKnownObjectMode.Singleton);*/
     
    //ce que j'ai maintenant
    ObjRef objRef = RemotingServices.Marshal(r,"Remote");




    coté client:
    -------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IRemote.IRemote Remote = (IRemote.IRemote)Activator.GetObject(typeof(IRemote.IRemote), "tcp://localhost:9988/Remote");
    while (true)
    {
           Console.WriteLine(Remote.getDernier10Tickets());
           Thread.Sleep(3000);
    }

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

Discussions similaires

  1. Remoting: comment initialiser l'objet avant de le publier?
    Par Rodrigue dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 05/03/2008, 17h22
  2. Réponses: 10
    Dernier message: 13/09/2006, 09h13
  3. Réponses: 7
    Dernier message: 29/03/2006, 21h41
  4. Réponses: 5
    Dernier message: 19/11/2005, 18h53
  5. [servlet] initialisation d'objets
    Par tiPouick dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 05/08/2003, 12h12

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