Вызов пользовательских методов для сервиса окон

Как может я называть пользовательский метод для сервиса окон:

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#

Спасибо.

1
задан marc_s 31 July 2010 в 07:57
поделиться

3 ответа

Кажется, вас смущают два разных использования слова «служба».

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

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

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

0
ответ дан 2 September 2019 в 22:33
поделиться

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

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

1
ответ дан 2 September 2019 в 22:33
поделиться

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

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

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

1
ответ дан 2 September 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: