2010-07-30 2 views
1

Comment puis-je appeler la méthode personnalisée sur un service Windows:Appel des méthodes personnalisées sur les fenêtres de service

public class TestService:ServiceBase 
{ 
    public TestService() 
    { 
     // constructor 
    } 

protected override void OnStart(string[] args) 
{ 
    // do some work here 
} 

protected override void OnStop() 
{ 
    // do some work here 
} 

public void TestMethod(int arg) 
{ 
    // do some work here 
} 
} 

Je sais que le nom du service est « TestService », donc je peux faire ce qui suit:

ServiceController sc = new ServiceController("TestService"); 

Mais si je fais ce qui suit, il ne fonctionne pas

sc.TestMethod(5);  // cannot do this 

Comment puis-je accéder à une méthode sur le service? J'utilise C#

Merci.

Répondre

0

Vous semblez être confondu par deux utilisations différentes du mot "service". D'une part, il existe des «processus de service», qui sont des processus d'arrière-plan de longue durée qui fonctionnent en arrière-plan et sont rarement, voire jamais, visibles par l'utilisateur. C'est ce que vous avez créé ci-dessus. Cependant, vous n'appelez normalement pas les méthodes directement sur un tel service - c'est un processus, pas un objet . Ensuite, il existe des "API de service", ce qui signifie généralement dans .NET WCF. Une API de service est une collection de méthodes accessibles à distance - à travers les processus ou même d'un ordinateur à un autre. WCF fournit un moyen super facile de créer et de consommer de tels services dans .NET. Un "processus de service" peut héberger une "API de service" - en fait, c'est généralement le cas. Mais dans ce cas, vous devez définir et appeler votre interface de service, pas seulement appeler des méthodes sur l'objet ServiceController.

1

Vous n'accédez généralement pas aux méthodes sur un service Windows. Qu'est-ce que vous essayez d'accomplir? Un service Windows peut héberger un service WCF accessible à partir d'autres applications. C'est peut-être ce que vous cherchez.

+0

Le service Windows traite certaines demandes. C'est en créant 20 threads. J'ai besoin de tuer l'un des threads quand une certaine condition est remplie. –

+1

Ensuite, vous devriez héberger un petit service WCF dans le service Windows. Lorsqu'il est appelé, cela va définir un drapeau qui est visible depuis le thread que vous voulez mourir. Lorsque ce thread voit le drapeau défini, il se tue. En général, c'est une mauvaise idée de tuer les threads. –

1

Vous pouvez gérer les commandes personnalisées pour les services Windows en implémentant ServiceBase.OnCustomCommand et les envoyer en appelant le ServiceController.ExecuteCommand. Cependant, ce type de "commande" est juste un identificateur de commande entre 128 et 256. Il n'y a pas de paramètres ou de valeurs de retour.

Dans la plupart des cas, cela est insuffisant et vous devez héberger un service WCF dans votre service Windows, comme d'autres l'ont suggéré.

Questions connexes