ASP.NET 样板和 Windows 服务

ASP.NET Boilerplate & Windows service

我正在创建一个基于 ABP 的简单 ASP.NET 解决方案,作为该解决方案的一部分,我使用了一个标准 Windows 服务,该服务应该执行小型后台操作(到目前为止只有 ICMP ping,但以后可能会更多)。

是否可以在此 Windows 服务中使用 ABP 应用程序服务(最好使用 IoC)?

感谢任何建议。

当然,您可以在 Windows 服务项目中使用 AppService。您也可以在 windows 服务中编写后台作业。您需要从 Windows 服务中引用您的应用程序项目。由于每个项目都表现为模块。您的新 Windows 服务需要注册为模块。这样您就可以使用依赖服务和其他有用的 ABP 库。

我将向您展示一些有关模块化的示例代码。但我建议您阅读模块文档:https://aspnetboilerplate.com/Pages/Documents/Module-System

MyWindowsServiceManagementModule.cs

 [DependsOn(typeof(MySampleProjectApplicationModule))]
    public class MyWindowsServiceManagementModule : AbpModule
    {
        public override void Initialize()
        {
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());

        }

    }

MyWindowsServiceWinService.cs

public partial class MyWindowsServiceWinService : ServiceBase
    {
        private MyWindowsServiceManagementBootstrapper _bootstrapper;

        public MyWindowsServiceWinService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            try
            {
                _bootstrapper = new MyWindowsServiceManagementBootstrapper();
                _bootstrapper.Initialize();
            }

            catch (Exception ex)
            {
                //EventLog.WriteEntry("MyWindowsService can not be started. Exception message = " + ex.GetType().Name + ": " + ex.Message + " | " + ex.StackTrace, EventLogEntryType.Error);               
            }
        }

        protected override void OnStop()
        {
            try
            {
                _bootstrapper.Dispose();
            }           
            catch (Exception ex)
            {
                //log...
            }           
        }
    }

MyWindowsServiceManagementBootstrapper.cs

    public class MyWindowsServiceManagementBootstrapper : AbpBootstrapper
        {

            public override void Initialize()
            {
                base.Initialize(); 
            }

            public override void Dispose()
            {
                //release your resources...
                base.Dispose();
            }
        }

Ps:当我在脑海中写代码时,它可能会抛出错误,但基本上这应该可以指导你。