8
votes

Comment appeler la méthode de l'exécution du service Windows

J'ai créé et lancé Windows Service Service1 (avec EXE comme myservice.exe) en utilisant c # 2005.. J'ai inclus une méthode getmyrandomnumber () qui renvoie une double valeur aléatoire.

Le problème ici est comment utiliser ce service de course et comment puis-je appeler la méthode. P>

J'ai essayé d'ajouter une référence à Myservice .exe et accéder à la méthode AS - P>

Service1 s = new Service1();
MessageBox.Show(s.GetMyRandomNumber().ToString());


0 commentaires

5 Réponses :


1
votes

Vous pouvez utiliser Foundation Windows Communication et IPC ( communication inter-processus ) pour communiquer avec votre service et exécuter votre méthode.


0 commentaires

9
votes

Vous devriez avoir un coup d'oeil à remoter


1 commentaires

Remoting n'est pas un bon choix si sur .NET 3.0+. Je préfère la réponse d'Alan.



16
votes

Dans votre code, vous n'appellez-vous pas réellement le service, mais vous référencez l'exécutable et appelez une méthode à partir de ce montage (au moment de l'exécution, le .NET Framework utilisera un assemblage local pour exécuter le code, et non votre exécution. Service).

Pour faire ce que vous voulez, vous avez un certain nombre d'options.

in .NET 2.0, vous utiliseriez .NET Remoting. Vous créez une interface de télécommande que d'autres assemblages peuvent utiliser pour appeler des méthodes entre exécutables.

in .NET 3.0, la télécommande a été remplacée par WCF. Votre service deviendrait un service WCF, qui exposerait le GetRandomnumber () dans le cadre de son contrat de données. Les applications peuvent consommer le contrat et se connecter à votre service pour appeler la méthode.

Il existe un certain nombre de bons tutoriels sur le Web pour les télécommandations .NET ou son remplacement, Windows Communication Foundation.


1 commentaires

+1 WCF serait le choix correct dans ce scénario si sur .NET 3.0+. Pour l'exhaustivité, j'aimerais ajouter que bien que WCF remplace les coupures dans presque tous les cas, il dispose toujours d'une niche pour la communication croisée croisée - je n'utiliserais pas WCF pour communiquer à travers les limites d'AppDomain, mais dans tous les autres cas, WCF est le bon choix.



2
votes

Communiquer avec un service de course n'est pas différent de l'invocation des méthodes sur un autre processus d'exécution. Cela signifie que vous devrez creuser vos outils standard pour la communication de processus à traiter.

Windows Communication Foundation (WCF) serait mon choix par défaut . Vous pouvez héberger un service WCF dans votre service Windows et l'exposer via un point de terminaison nommé pour une communication efficace.


0 commentaires

4
votes

WCF sera un overkill pour la communication sur le même ordinateur. Tipes est une solution plus simple et plus efficace. < / p>


3 commentaires

Il utilise C # 2005 (.NET 2.0?) Donc, WCF n'est pas une option.


Bonne observation. Je n'avais pas remarqué ça.


Je cherche une autre alternative pour la WCF, votre réponse a eu mon vote