2014-07-16 33 views
8

几个windows服务可以共享一个进程。在C#中,他们将开始为:从.Net角度来看windows服务的体系结构

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

run方法块调用线程,其中main()执行。同时处理服务事件。那么他们在哪里执行?

他们是否使用异步过程调用的“主”过程中不仅被阻止,而是在可警告等待?如果是这样,共享多个服务的过程在性能方面存在缺陷。处理程序是否在单独的线程中运行?它们是否在包含Run()调用的流程之外执行?

+2

你问了7个问题。你必须把它削减到*一个*。 –

+2

@HansPassant问题2-5只是第一个问题的解释。我删除了6,7。 – SerG

+2

http://msdn.microsoft.com/en-us/library/windows/desktop/ms685967%28v=vs.85%29.aspx –

回答

0

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

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

要接收有关服务状态的通知,入口点(ServiceMain,由ServiceBase类实现)必须调用RegisterServiceCtrlHandlerEx来接收通知。这些通知使用APC发送。作为一个侧面说明,NotifyServiceStatusChange API也使用APC。

0

您可能要做的是Windows服务体系结构以及如何将服务应用程序集成到其中。

已经有关于在MSDN该主题一个很好的文章,which can be found here.

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

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