Вызов пользовательских методов в службе Windows - PullRequest
1 голос
/ 30 июля 2010

Как я могу вызвать пользовательский метод в службе Windows:

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
 }
}

Я знаю, что имя службы - "TestService", поэтому я могу сделать следующее:

ServiceController sc = new ServiceController("TestService");

Но если я сделаю следующее, оно не будет работать

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

Как я могу получить доступ к методу в службе?Я использую c #

Спасибо.

Ответы [ 3 ]

1 голос
/ 31 июля 2010

Вы можете обрабатывать пользовательские команды для служб Windows, внедряя ServiceBase.OnCustomCommand, и отправлять их, вызывая ServiceController.ExecuteCommand.

Однако этот вид «команды» является просто идентификатором команды между 128 и 256. Нет параметров или возвращаемых значений.

В большинстве случаев этого недостаточно, и вы должны разместить службу WCF в своей службе Windows, как предлагали другие.

1 голос
/ 30 июля 2010

Обычно вы не обращаетесь к методам в службе Windows. Что вы пытаетесь достичь?

Служба Windows может размещать службу WCF, к которой можно обращаться из других приложений. Это может быть то, что вы ищете.

0 голосов
/ 30 июля 2010

Вас, кажется, смущают два разных использования слова "сервис".

С одной стороны, существуют «сервисные процессы», которые представляют собой длительные фоновые процессы, которые работают в фоновом режиме и редко, если вообще когда-либо, видны пользователю. Это то, что вы создали выше. Однако обычно вы не вызываете методы непосредственно в такой службе - это процесс , а не объект .

Затем существуют «служебные API», которые в .NET обычно означают WCF. Сервисный API - это набор методов, к которым можно обращаться удаленно - между процессами или даже с одного компьютера на другой. WCF предоставляет очень простой способ создавать и использовать такие сервисы в .NET.

«Сервисный процесс» может содержать «сервисный API» - фактически, обычно это так. Но в этом случае вам нужно определить и вызвать интерфейс службы, а не просто вызывать методы объекта ServiceController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...