ASP.NET Boilerplate& Windows服务

时间:2017-09-29 14:32:05

标签: c# asp.net asp.net-boilerplate

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

是否可以在此Windows服务中使用ABP应用程序服务(理想情况下使用IoC)?

感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

当然,您可以在Windows服务项目中使用AppServices。您也可以在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:当我把代码写在我头顶时,它可能会引发错误,但基本上这应该引导你。