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
Partager