kikiokiller
Messages postés42Date d'inscriptionlundi 26 février 2007StatutMembreDernière intervention31 mai 2009
-
23 mai 2009 à 12:58
kikiokiller
Messages postés42Date d'inscriptionlundi 26 février 2007StatutMembreDernière intervention31 mai 2009
-
25 mai 2009 à 16:11
Bonjour à tous,
Dans le cadre d'une application client serveur que j'essaie de réaliser
depuis 3 semaines maintenant, je rencontre un problème concernant des
évènements distant.
Oublions la notion de client/serveur un instant, mais parlons plutôt
d'une application installé sur un ordinateur A et d'une autre
application installé sur un ordinateur B. Toutes deux étant bien
différente, mais communicante en réseau local.
Pour ceux qui prendront la peine de télécharger ces deux applications,
vous constaterez que se sont deux applications communiquant en réseau
tcp, et que lorsque l'application "client" se connecte à l'application
"serveur", un evenement "monitor" se déclenche coté serveur.
Il apparait donc évident qu'il est tout à fait possible d'écrire des méthodes coté serveur, et de les faire appeler du client.
En l'occurrence ici, le serveur attend une connexion pour exécuter la méthode "Monitor".
J'aimerai donc me baser sur cet exemple, en rajoutant un bouton coté client pour qu'un formulaire s'ouvre coté serveur.
Il va de soit que la méthode d'ouverture ( form.show()) est écrite coté serveur.
Comment puis-je obtenir ce résultat?
Merci infiniment pour votre aide.
A voir également:
Le certificat distant n'est pas valide selon la procédure de validation.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 25 mai 2009 à 10:29
Salut
Ton 1er programme doit envoyer un message au deuxième. Ce deuxième programme doit continuellement regarder s'il reçoit un message.
Une fois qu'il a reçu le message correspondant au clic sur le bouton du premier programme, le deuxième programme ouvre sa fenêtre.
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
kikiokiller
Messages postés42Date d'inscriptionlundi 26 février 2007StatutMembreDernière intervention31 mai 2009 25 mai 2009 à 10:46
Je dois donc créer un protocole? Comment dois-je procéder? Aurais tu un exemple à me fournir sous forme de code ( coté client, coté serveur). Peut etre une dll commune aussi?
Merci
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 25 mai 2009 à 11:14
Créer un protocole : à priori oui, je ne vois pas d'autre solution.
Comment tu dois procéder : théoriquement, un simple envoi/lecture d'un string sur une socket devrait suffire (bon, personnellement, je n'ai jamais utilisé de socket en C#, donc je ne peux pas m'étendre sur le sujet, désolé).
Un exemple précis, non. Un exemple basique du fonctionnement, oui :
client :
public Form1()
{
InitializeComponent();
Reseau MonReseau = new Reseau(); // Classe perso qui te permet d'utiliser des sockets
MonReseau.OuvertureSocket("192.168.0.10", 1000); // une méthode qui crée une socket et l'ouvre entre cet ordi et l'ordi dont tu fournis l'adresse IP sur le port indiqué.
monBouton.Click += new EventHandler(monBouton_Click);
}
serveur :
static void main(string[] args)
{
string message;
bool stop = false;
Reseau MonReseau = new Reseau();
MonReseau.AttendUneConnexion(1000);
do
{
message = MonReseau.LitMessage();
switch(message)
{
case "OUVRE_FENETRE":
maForm = new Form1();
maForm.Show();
break;
case "QUITTER":
maForm.Close();
stop = true;
break;
default:
MessageBox.Show("Message non reconnu !");
break;
}
}
while(!stop);
}
Bon, voilà une ébauche de code qui pourrait faire ce que tu souhaites (bon, il faut quand même créer ou trouver une classe comme "Reseau" dans mon exemple). Ne connaissant pas du tout WCF, je ne peux pas te dire s'il existe plus simple pour faire ça.
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 25 mai 2009 à 12:07
En fait, je ne connais à peu près rien en réseau spécifique à .net (ni WCF, ni .net remoting...).
Cependant, je me demande si le .net remoting n'est pas fait pour exécuter des méthodes stockées sur une autre machine...
Le fait est que (je ne crois pas qu'il y ait d'exception) un code est TOUJOURS exécuté sur la machine APPELANTE, et non sur la machine sur laquelle le code se trouve.
donc si, sur le client, tu fais un truc du genre
monServeur.ShutdownTheComputer();
ça t'éteindra le client et non le serveur.
C'est pourquoi il faut passer un message à ton serveur pour que le serveur puisse exécuter la méthode.
Mais maintenant que j'y pense, un service web c'est juste un passage de messages en SOAP, donc théoriquement, son code est exécuté sur la machine sur laquelle le service est exécuté. Tu peux aussi voir dans cette direction...
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -