1

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

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

感谢您的任何建议。

4

1 回答 1

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:当我在头顶写代码时,它可能会抛出错误,但基本上这应该可以指导你。

于 2017-09-30T12:38:01.760 回答