将数据传递到自定义Windows服务

时间:2009-09-01 15:42:47

标签: .net windows service

我正在使用C#开发自定义Windows服务,该服务将管理多个.NET应用程序实例的状态。如何通过ServiceController将数据(如令牌)传递给服务?

这是可能的,还是我不完全理解Windows服务背后的设计意图?

1 个答案:

答案 0 :(得分:6)

JonnyD,

只是为了确保我们在同一页面上:如果您正在创建自己的服务,那么您将从 System.SystemProcess <中的 ServiceBase 类派生出来/ strong>命名空间。 ServiceController 可用于与Windows服务(例如您正在创建的服务)进行交互,但 ServiceController 类的目的是主要用于它service control 与Windows服务控制管理器(SCM)启动,停止,暂停等Windows服务的方式相同。您可以通过 ServiceController ExecuteCommand 方法与您的服务进行某种形式的“业务交互”,但这并不是它的主要目的。

大多数旨在与其他应用程序交互的Windows服务通常会建立侦听器和其他众所周知的端点,调用者可以将这些端点用于交互。这些侦听器可以通过远程处理,Web服务,WCF等处理,并且可以在服务启动时创建(例如, OnStart 方法触发)并在服务顶部拆除( OnStop )。

我不知道您尝试使用服务遇到的具体要求,但您表示您正在寻求创建状态管理服务。这些是相对常见的服务,它们通常被创建为单例,以确保所有调用者访问所需状态管理类/类型的一个实例。以下链接可能会为您提供有关如何使用远程处理实现此类服务的一些想法和指导。如果您对WCF更熟悉,也可以使用它来代替.NET远程处理:

http://www.codeproject.com/KB/IP/Chat_Application.aspx

您将拥有状态管理服务器/类型,而不是ChatServer(如示例所示)。

我希望这有帮助!