Как может я называть пользовательский метод для сервиса окон:
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#
Спасибо.
Кажется, вас смущают два разных использования слова «служба».
С одной стороны, существуют «служебные процессы», которые представляют собой длительные фоновые процессы, которые работают в фоновом режиме и редко, если вообще когда-либо, видны пользователю. Это то, что вы создали выше. Однако обычно вы не вызываете методы непосредственно в такой службе - это процесс , а не объект .
Кроме того, существуют «служебные API», которые в .NET обычно означают WCF. Сервисный API - это набор методов, к которым можно получить удаленный доступ - через процессы или даже с одного компьютера на другой. WCF предоставляет очень простой способ создавать и использовать такие службы в .NET.
«Сервисный процесс» может содержать «сервисный API» - фактически, обычно так и есть. Но в этом случае вам нужно определить и вызвать интерфейс службы, а не просто вызывать методы объекта ServiceController
.
Обычно вы не обращаетесь к методам службы Windows. Чего вы пытаетесь достичь?
Служба Windows может содержать службу WCF, к которой можно получить доступ из других приложений. Это может быть то, что вы ищете.
Пользовательские команды для служб Windows можно обрабатывать, реализовав ServiceBase.OnCustomCommand
, и отправлять их, вызывая ServiceController.ExecuteCommand
.
Однако этот вид «команды» - это просто идентификатор команды от 128 до 256. Параметры или возвращаемые значения отсутствуют.
В большинстве случаев этого недостаточно, и вы должны разместить службу WCF в своей службе Windows, как предлагали другие.