你的位置:首页 > ASP.net教程

[ASP.net教程]使用TopSelf创建自宿主的Windows服务程序


在传统的Windows服务开发过程中,需要添加一个服务安装程序,里面写安装,启动和停止服务等逻辑。现在,使用TopSelf可以简化这个过程。

首先,继承 ServiceControl 写一个应用服务类:

 internal class AppService : ServiceControl  {    ILog log = LogManager.GetLogger(typeof(AppService));       public void Initialize()    {      log.Info("Initialize");      Console.WriteLine("Engine starting....");      EngineContext.Initialize(false);           Console.WriteLine("Engine started");    }    public bool Start(HostControl hostControl)    {      Console.WriteLine("Hosts starting....");      ServiceHostHelper.OpenWcfService();          Console.WriteLine("Hosts started");      return true;    }    public bool Stop(HostControl hostControl)    {      ServiceHostHelper.CloseWcfService();      return true;    }  }

然后,在主程序里面,写如下代码:

static void Main(string[] args)    {      try      {        HostFactory.Run(x =>        {          x.RunAsLocalSystem();          x.StartAutomatically();          //x.StartManually();          var defaultName = GetDefaultServiceName();          var config = DXNConfig.Current.AppServer;          x.SetServiceName("我的服务1");          x.SetDisplayName("我的服务1");          x.SetDescription("我的服务1描述");          x.Service(factory =>          {            var service = new AppService();            service.Initialize();            return service;          });        });      }      catch (Exception ex)      {        try        {          LogManager.GetLogger(typeof(Program)).Fatal("AppServer launch error", ex);        }        catch        {         }        //throw;      }    }}


这些服务名称性信息是可以修改的。
好了,现在编译,我们的程序就可以当服务使用了。

之后,就可以用命令行来安装服务:

@echo off%~d0cd %~dp0cd..rem ApplicationServer.exe install -servicename "ApplicationServer" -displayname "ApplicationServer" -description "XX业务管理系统"ApplicationServer.exe install@echo 启动服务...ApplicationServer.exe startecho 启动结束


启动服务:

sc start "ApplicationServer"

停止服务:

sc stop "ApplicationServer"

卸载服务:

ApplicationServer.exe uninstall

运行第一个启动服务的批处理文件,将输出下面的内容:

Configuration Result:[Success] Name DEV_DXN_ApplicationServer[Success] DisplayName ApplicationServer[Success] Description XXX业务管理系统[Success] ServiceName ApplicationServerTopshelf v3.0.105.0, .NET Framework v4.0.30319.34014正在运行事务处理安装。正在开始安装的“安装”阶段。Installing DXN ApplicationServer service正在安装服务 DXN_ApplicationServer...已成功安装服务DXN_ApplicationServer。正在日志 Application 中创建 EventLog 源 ApplicationServer...“安装”阶段已成功完成,正在开始“提交”阶段。“提交”阶段已成功完成。已完成事务处理安装。启动服务...Configuration Result:[Success] Name DXN_ApplicationServer[Success] DisplayName ApplicationServer[Success] Description XX管理系统[Success] ServiceName ApplicationServerTopshelf v3.0.105.0, .NET Framework v4.0.30319.34014The ApplicationServer service is not installed.

过程全部完成。