Remoting simple et concret avec evenement

Soyez le premier à donner votre avis sur cette source.

Vue 10 438 fois - Téléchargée 694 fois

Description

Pas de panique, c'est une application extrêmement simple !!!
Il s'agit d'une application concrete réalisée pour un client (gratuitement).

Origine de l'application :
Oracle Mobile Server est installé sur un serveur. Le moteur WEBTOGO est executé dessus.
Ce serveur est un serveur de synchronisation entre des PDA et une Application de gestion de maintenance sous oracle centralisée. Un utilisateur est designé Administrateur pour paramétrer WEBTOGO.

Le problème :
Il arrive que Mobile server "Plante" et qu'un administrateur système (qui dispose des droits d'accès sur le serveur) soit obligé d'arreter et de redemarrer "Mobile Server" pour que cet utilisateur puisse ajouter de nouveaux utilisateurs PDA.

But de l'application :
On installe sur le serveur qui contient "Mobile Server" une application serveur qui écoute et execute les commandes qu'elle reçoit.
On installe sur l'ordinateur de l'administrateur de l'application une Application Cliente qui, lorsqu'il appui sur Arreter, STOP l'application Mobile Server (qui se trouve sur le serveur) et lorsqu'on appui sur Démarrer, LANCE l'application Mobile Server.

C'est tout bête mais tres utile. L'administrateur de l'application n'a plus besoin d'une tierce personne pour redémarrer l'application situé sur le serveur (à distance).

La solution est découpé en 3 composants :

Le client
Le serveur
L'Interface

PS : je sais très bien que j'aurai pu faire uniquement un bouton redémarrer et enlever la pause de 5 secondes mais dans un soucis de simplicité et de rapidité de développement (30 minutes) ceci n'a pas été fait.

PS: dans le .config vous trouverez les clés suivantes :

<add key="Application" value="L:\oracle\Ora10gL\Mobile\Server\bin\runmobileserver.bat" />
<add key="ApplicationName" value="Mobile Server" />
<add key="ApplicationKillName" value="java" />

La 1ère est l'application à démarrer lorsqu'on appui sur "Démarrer"
les 2 autres sont utilisé pour detecté l'application à fermer :
Application Name => si le titre de la fenêtre contient "Mobile Server"
ApplicationKillName => c'est le nom du processus à détruire.

Bref, en remplacant seulement ces 3 valeurs, vous pourrez démarrer/arreter n'importe quelle application à distance.

Dernière chose. Le port utilisé pour le serveur est le 1069.

Vos commentaires (constructifs) sont les bienvenus.

Source / Exemple :


'N'oubliez pas de modifier dans le FORM LOAD du client
'FRSV000634 par l'IP ou le NOm de VOTRE SERVEUR

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Button1.Visible = False
    Try
      Dim channel As TcpChannel = New TcpChannel
      ChannelServices.RegisterChannel(channel)
      remoteOperation = CType(Activator.GetObject(GetType(ITelviewRemote.ITelviewRemote), _
   "tcp://FRSV000634:1069/RemoteOperation"), ITelviewRemote.ITelviewRemote)
    Catch ex As Exception
      MessageBox.Show("Erreur de connexion au serveur" & vbCrLf & ex.Message)
    End Try
  End Sub

Conclusion :


'N'oubliez pas de modifier dans le FORM LOAD du client
'FRSV000634 par l'IP ou le NOm de VOTRE SERVEUR

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

langju
Messages postés
88
Date d'inscription
mardi 6 février 2001
Statut
Membre
Dernière intervention
27 juillet 2007
-
En fait, l'avantage du delegate est que tu peux faire un AddHandler et un RemoveHandler en plein code, c'est à dire tu assignes ou non ton evenement.

Alors qu'avec le withevents, quoi qu'il arrive ton evenement existera (même si jamais utilisé il sera présent en mémoire) via le Handles ( a moins que ton but est d'attacher des evenements à des controles ?)

voilou
dieuzorro
Messages postés
21
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
14 janvier 2008
-
Pourquoi tu trouve sa mieux de faire ta déclaration en delegate plutôt qu'en withEvents.

Perso je préfère en WithEvents car je trouve sa moins perturbant car sa le code est comme un événement des autres objet (exemple: evenement d'un bouton) et on peut voir la liste des événements dans la combo de Visual studio.
langju
Messages postés
88
Date d'inscription
mardi 6 février 2001
Statut
Membre
Dernière intervention
27 juillet 2007
-
DIEUZORRO, concernant tes modifs je pense que c'est mieux de faire une declaration en delegate plutot qu'en WithEvents.

Sinon, oui tu peux m'envoyer je mettrais la source à jour comme çà.

Là j'ai effectivement utiliser un simple AS EventHandler mais j'aurais très bien pu creer un deleguer et instancié en AS NomdeDelegate.

Concernant le pb si le client est démarré avant le serveur : oui je sais : j'ai codé cela en - d'1 heure pour dépanner donc y a pas de controle d'erreur partout effectivement.

Sinon hesite pas à poster tes modifs ou m'envoyer la soure modifié.
dieuzorro
Messages postés
21
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
14 janvier 2008
-
Je viens juste de tester ton exemple sa marche. (Désoler d'avoir été long) Donc sa marche sa cool mais j'ai un peu modifier le code ( Ajout d'un événement msg(as_msg as string) et déclaration dans le client de Public WithEvents eventshim As eventshim)

Par contre quand le client démarre avant le serveur il y a une exception lors de l'instanciation de la classe EventShim.

Ps : langju si tu veux voir les petites modifications que j'ai dit le moi! Et Merci pour ton exemple qui est très bien.
langju
Messages postés
88
Date d'inscription
mardi 6 février 2001
Statut
Membre
Dernière intervention
27 juillet 2007
-
ok DIEUZORRO, j'espère que cela t'iras :-) tiens moi au courant

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.