Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

REMOTING SIMPLE ET CONCRET AVEC EVENEMENT


Information sur la source

Catégorie :Réseau & Internet Source .NET ( DotNet ) Classé sous : remoting, remote, interface, eventhandler Niveau : Débutant Date de création : 11/07/2007 Date de mise à jour : 13/07/2007 19:01:56 Vu / téléchargé: 6 306 / 383

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

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

  • '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
'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

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

11 juillet 2007 18:22:43 :
Modification de la présentation du code
11 juillet 2007 19:14:40 :
Precision sur le FORM_LOAD du client
13 juillet 2007 19:01:56 :
Comme DIEUZORRO le souhaité, j'ai ajouté la gestion d'evenement. L'evenement est déclenché sur le serveur et le client reçoit l'information. J'ai aussi modifié le .config de facon a ce qu'il ne lance Notepad (ce qui me semble + facile a disposer). J'ai aussi ajouter la remotekey.snk pour la signature en nom fort. La source est de niveau un peu + elevé que débutant à cause de la gestion de l'évenement. Vos notes sont bienvenues !

Commentaires et avis

signaler à un administrateur
Commentaire de langju le 11/07/2007 19:17:17

Vos commentaires et notes sont bienvenus. (Source pour débutant très simple à comprendre.)

signaler à un administrateur
Commentaire de dieuzorro le 12/07/2007 13:06:16

Salut,

     Pourai-tu ajouter un evenement dans ton exemple?  

signaler à un administrateur
Commentaire de langju le 12/07/2007 13:31:43

les evenements sont à ajouter dans le remoteoperation.vb

PS: modifiez la source à votre convenance.

signaler à un administrateur
Commentaire de langju le 12/07/2007 13:49:40

Quelle genre d'evenement aurais-tu voulu ajouter ?

signaler à un administrateur
Commentaire de cacalex le 12/07/2007 13:57:56

Joli !

Si ça vraiment été codé en 30 min...

"PS: modifiez la source à votre convenance."

Compte sur moi !
:)

signaler à un administrateur
Commentaire de langju le 12/07/2007 14:43:31

oui peut être 45 minutes... mais c clair - d'1 heure (sinon c'est facturé :-)).
En vérité c'est très rapide à coder cela : je disposais déjà d'une partie des fonctions dans d'autres programmes. Copier / coller et modification ca va tres vite ensuite.

La source peut être utile effectivement.

signaler à un administrateur
Commentaire de cacalex le 12/07/2007 15:42:44

Moi, si je met au moins 5 minutes, je facture 1 heure :)

signaler à un administrateur
Commentaire de langju le 12/07/2007 16:04:51

lol

signaler à un administrateur
Commentaire de cacalex le 12/07/2007 16:40:07

Bizarrement, si je démarre la partie "serveur" à distance, avec psexec, l'ordi distant est bien à l'écoute sur le port 1069, mais le "client" n'arrive jamais à se connecter...

ça ne change rien à ton programme, plutôt un bogue au niveau de l'"impersonating" de psexec...

signaler à un administrateur
Commentaire de dieuzorro le 12/07/2007 18:03:51

Moi je souhaiterai un événement du genre travail fini coté serveur avec comme argument de l'événement une string stockant un rapport. Si je pose la question c'est que j'ai déja cherché à ce sujet la et que j'ai rien trouvé de fraiment bien.

signaler à un administrateur
Commentaire de dieuzorro le 12/07/2007 18:07:26

vraiment bien.

signaler à un administrateur
Commentaire de langju le 12/07/2007 18:30:59

Il faut dans ce cas gérer une Delegate Sub avec un appel en callback.

Si vraiment j'ai le temps j'ajouterais cet evenement qui indique que le serveur a terminé.

signaler à un administrateur
Commentaire de langju le 12/07/2007 18:46:22

DIEUZERRO, si je comprend bien, tu veux que le serveur indique au client que l'opération a bien été réalisé c'est cela ?

signaler à un administrateur
Commentaire de cacalex le 12/07/2007 20:46:01

cool...

J'ai modifier le pare-feu windows pour laisser un seul port ouvert... Je fait ecouter le serveur sur ce port...

Et au besoin, sur commande, le serveur ferme le firewall windows, et le réouvre lorsque j'ai terminé...

:)
J'ai comme plein d'idée pour une appli comme ça !
Merci !

signaler à un administrateur
Commentaire de dieuzorro le 12/07/2007 21:01:56

Oui c'est bien sa!

signaler à un administrateur
Commentaire de langju le 13/07/2007 19:29:52

DIEUZORRO, j'ai ajouté un évenement.

Celui-ci est tout bête, il s'agit d'un eventHandler.

Rien ne vous empeche de faire votre propre délégué pour lui transmettre une string plutot que sender et e.



signaler à un administrateur
Commentaire de langju le 13/07/2007 19:31:07

CACALEX, en effet, dans ce cas il faut que tu lances le serveur en mode "interactif" avec psexec.

signaler à un administrateur
Commentaire de cacalex le 13/07/2007 20:16:12

langju:

Merci pour le mode interactif... L'option m'avais échappé...

ça fonctionne !

signaler à un administrateur
Commentaire de dieuzorro le 14/07/2007 09:32:57

Merci je vai regarder!

signaler à un administrateur
Commentaire de langju le 14/07/2007 11:30:57

ok DIEUZORRO, j'espère que cela t'iras :-) tiens moi au courant

signaler à un administrateur
Commentaire de dieuzorro le 27/07/2007 16:18:26

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.

signaler à un administrateur
Commentaire de langju le 27/07/2007 16:30:25

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é.

signaler à un administrateur
Commentaire de dieuzorro le 27/07/2007 16:42:43

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.

signaler à un administrateur
Commentaire de langju le 27/07/2007 17:12:00

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

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Interface Pointer-Cliquer... [ par Ben ] Existe-t-il un moyen pas trop trop lourd pour réaliser un programme possédant cette interface?Est-il possible de rendre les objets boutons invisibles, Appel de C avec VB [ par Aurel ] Je voudrais savoir s'il etait possible d'appelerun programme C avec une interface en VBEn fait il s'agit d'une messagerie dont toutes les fonctions so Connaitre la source d'une base de données. [ par kaleidon ] Bonjour,Est-il possible de connaitre la source d'une base de données (Oracle, Access, SQL...) autrement qu'en demandant au développeur (qui ne veut pa Créer une interface Outlook pour envoyer des mails depuis une appli [ par Brouz ] Bijour bijour,j'ai une petite appli en interne et je souhaite créer une interface avec Outlook sous VB6 pour envoyer des mails.dans l'idée, suite à un FAIRE BOUGER UNE FEUILLE [ par wojc ] Bonjours....Je voudrais réaliser une interface graphique, j'ai le corps principal de l'interface sur une FORM, mais je voudrais que lorsque je clique BESION D'AIDE POUR LES INTERFACE MDI [ par Tek ] Mon probleme est que j'appelle un objet sur une feuille fille ! par une feuille fille la premier s'ouvre !!!je m'explike !!!FRM1.DATA.TEXT ( appller p BESION D'AIDE POUR LES INTERFACE MDI [ par Tek ] Mon probleme est que j'appelle un objet sur une feuille fille ! par une feuille fille la premier s'ouvre !!!je m'explike !!!FRM1.DATA.TEXT ( appller p Un interface de programme ? les grandes lignes [ par holger ] Voilà dans quelque temps je vais me lancé dans la programmation d'un interface de programme et sa réalisation.J'aurai souhiater deux trois conseils de Mèmère ? [ par Arnotic ] Salut,Je vourdrai savoir comment tu créer simplement et rapidement une aussi belle interface ?Car j'ai essayé mais ca prend du temps ! Et en plus pour


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.