Xây Dựng Window Service Đơn Giản Hơn Với Topshelf

Topshelf là một framework hỗ trợ xây dựng các windows service trên nền .NET một cách nhanh chóng. Topshelf cho phép các nhà phát triển tạo ra một ứng dụng console đơn giản mà có thể được cài đặt như một windows service. Dễ dàng hơn cho debug.

topshelf-tuanpham-phamtuan

Why would I want to use Topshelf?

Topshelf is a Windows service framework for the .NET platform. Topshelf makes it easy to create a Windows service, test the service, debug the service, and ultimately install it into the Windows Service Control Manager (SCM). Topshelf does this by allowing developers to focus on service logic instead of the details of interacting with the built-in service support in the .NET framework. Developers don’t need to understand the complex details of service classes, perform installation via InstallUtil, or learn how to attach the debugger to services for troubleshooting issues.

Bài viết mới nhất

Topshelf là một framework mã nguồn mở, các bạn có thể tải source-code tại GitHub. Hoặc get trực tiếp thông qua Nuget:

Install-Package Topshelf

Để thấy sự tiện lợi, các bạn hãy xem đoạn code dưới đây.

public class MyService // Service của bạn
{	
    public MyService()
    {
        // Do something
    }
    public void Start() { // Do something }
    public void Stop() { // Do something }
}

public class Program
{
    public static void Main()
    {
        HostFactory.Run(x => // Setup các thông tin cần thiết
        {
            x.Service<MyService>(s => // Khai báo các callBack
            {
               s.ConstructUsing(name=> new MyService()); // Cách mà service của tôi được khởi tạo
               s.WhenStarted(tc => tc.Start());  // Khi service được start
               s.WhenStopped(tc => tc.Stop());  // Khi service được stop
            });
            x.RunAsLocalSystem(); // Service sẽ được chạy với quyền gì

            // Thông tin service, bạn có thể không khai báo các thông tin này vì Topshelf cho phép bạn
            // khai báo khi install thông qua cmd
            x.SetDescription("This is MyService");
            x.SetDisplayName("MyService");
            x.SetServiceName("MyService");
        });
    }
}

Ngoài ra Topshelf còn hỗ trợ developer config sâu hơn vào các behavior của service như:

  • Service Recovery
  • Service Identity
  • Custom Install Actions
  • Service Dependencies
  • Advanced Settings

Bênh cạnh đó, Topshelf cũng hỗ trợ logging framework như: log4net, NLog
log4net

// Install-Package Topshelf.Log4Net
HostFactory.Run(x =>
{
    x.UseLog4Net();
// .........................
});

NLog

// Install-Package Topshelf.NLog
HostFactory.Run(x =>
{
    x.UseNLog();
// .........................
});

Ví dụ:

using log4net;
using log4net.Config;
using Topshelf;

namespace topshelftest
{
    using log4net;
    using log4net.Config;
    using Topshelf;

    public class MyService
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(MyService));

        public void Start()
        {
            log.Info("Started");
        }

        public void Stop()
        {
            log.Info("Stopped");
        }
    }
	
    class Program
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(Program));

        static void Main(string[] args)
        {
            XmlConfigurator.Configure();

            log.Error("HELLO.....");

            HostFactory.Run(
                x =>
                    {
                        x.UseLog4Net();
                        x.Service<MyService>(
                            s =>
                                {
                                    s.ConstructUsing(name => new MyService());
                                    s.WhenStarted(tc => tc.Start());
                                    s.WhenStopped(tc => tc.Stop());
                                });
                        x.RunAsLocalSystem();

                        x.SetDescription("This is MyService");
                        x.SetDisplayName("MyService");
                        x.SetServiceName("MyService");
                    });
        }
    }
}

Lưu ý rằng Topshelf cũng có một bộ command riêng để install, uninstall và start, stop service. Xem thêm tại Topshelf Doc.

D:\MyProject\MyService.exe install -servicename "MyService"
// Hoặc
D:\MyProject\MyService.exe uninstall -servicename "MyService"
// Hoặc
D:\MyProject\MyService.exe start -servicename "MyService"
// Hoặc
D:\MyProject\MyService.exe stop -servicename "MyService"

Ngoài ra các bạn cũng có thể thêm vào Topshelf những command của riêng mình bằng cách dùng Topshelf.StartParameters.

Ví dụ:

// MyService.exe install -config "standard" -setmyparam "customparam"
HostFactory.Run(x =>
            {
                x.EnableStartParameters();
                x.UseNLog();
                x.Service<MyService>(sc =>
                {
                    sc.ConstructUsing(hs => new MyService());
                    sc.WhenStarted(s => s.Start());
                    sc.WhenStopped(s => s.Stop());
                });

                x.WithStartParameter("config",
                    a => HostLogger.Get("StartParameters").InfoFormat("parameter: {0}, value: {1}", "config", a));

                x.WithCustomStartParameter("setmyparam", "myparam",
                    a => HostLogger.Get("StartParameters").InfoFormat("custom parameter: {0}, value: {1}", "myparam", a));

                x.SetServiceName("MyService");
                x.SetDisplayName("My Service");
                x.SetDescription("Sample Service");
                x.RunAsLocalSystem();
            });

Phạm Tuân

Trả lời

Điền thông tin vào ô dưới đây hoặc nhấn vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s