从.Net的角度来看Windows服务的体系结构

时间:2014-07-16 10:53:35

标签: c# .net windows winapi service

多个Windows服务可以共享一个进程。在C#中,他们将以:

开头
ServiceBase.Run(new MyService1(), new MyService2());

run方法的调用阻塞main()执行的线程。同时处理服务事件。那他们在哪里执行?

他们是否在" main"中使用异步过程调用?这个过程不仅被阻止而且处于警惕等待状态?如果是这样的话,共享多个服务的过程在性能上有缺点。处理程序是否在单独的线程中运行?它们是否在包含Run()电话的流程之外执行?

2 个答案:

答案 0 :(得分:0)

您可能会追求的是Windows服务架构以及服务应用程序如何集成在其中。

MSDN中已有一篇关于该主题的非常好的文章,which can be found here.

它不仅解释了Windows如何与服务交互,服务数据库如何工作(至少部分)。

本文还解释了操作系统服务的工作原理,并对IIS中的托管服务(Internet信息服务)提供了一些提示。

答案 1 :(得分:0)

在Windows中,多个服务可以使用SERVICE_WIN32_SHARE_PROCESS服务类型共享单个进程。 .NET必须使用此服务类型在Windows上的单个进程中注册多个服务。

每个注册的服务都有一个名称和一个由SERVICE_TABLE_ENTRY结构表示的本地入口点地址。 .NET应为传递给SERVICE_TABLE_ENTRY方法的每个服务构造ServiceBase.Run,并使用这些信息调用StartServiceCtrlDispatcher函数。

要接收有关服务状态的通知,入口点(ServiceMain类实施的ServiceBase)必须致电RegisterServiceCtrlHandlerEx以接收通知。这些通知使用APC发送。另外,NotifyServiceStatusChange API也使用了APC。