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