Topshelf一個用於使用.NET構建Windows服務框架


1 Topshelf是什么?

Topshelf是用於托管使用.NET框架編寫的Windows服務的框架。服務的創建得到簡化,從而使開發人員可以創建一個簡單的控制台應用程序,可以使用Topshelf將其作為服務安裝。原因很簡單:調試控制台應用程序比服務容易得多。一旦對應用程序進行了測試並准備投入生產,Topshelf便可以輕松地將應用程序即服務安裝。

2 使用

2.1 創建應用程序

首先,創建一個新的控制台應用程序並從nuget獲取Topshelf軟件包

Topshelf

當您使用Topshelf時,我還建議裝一下日志庫,我們可以選擇日志框架Serilog。

Topshelf.Serilog
Serilog.Sinks.Console

2.2 創建服務類

然后,創建服務類。我將其命名為MyService。在這里放置將在Windows服務的特定生命周期事件中調用的方法。至少,添加一些用於啟動和停止服務的方法。

public class MyService
{
    readonly ILogger log = Log.ForContext(MethodBase.GetCurrentMethod().DeclaringType);
    public void Start()
    {
        log.Information("Starting MyService...");
    }

    public void Stop()
    {
        log.Information("Stopping MyService...");
    }
}

2.3 在Topshelf中注冊服務

接着,在Topshelf中注冊我們的服務類。跳轉到Program.cs並添加:

class Program
{
    static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .WriteTo.Console()
            .MinimumLevel.Debug()
            .CreateLogger();

        var rc = HostFactory.Run(x =>
        {
            x.UseSerilog(); // HostLogger改為使用Serilog。
            x.SetDisplayName("我的服務");  // 我們設置要在Windows服務監視器中使用的winservice的顯示名稱。
            x.SetDescription("我的服務詳細描述"); // 我們設置了在Windows服務監視器中使用的winservice的描述。
            x.SetServiceName("MyService"); // 我們設置要在Windows服務監視器中使用的winservice的服務名稱。
            x.Service<MyService>(s =>
            {
                s.ConstructUsing(name => new MyService()); // 構建服務實例。
                s.WhenStarted(tc => tc.Start()); // 啟動服務
                s.WhenStopped(tc => tc.Stop()); // 停止服務
            });
            x.RunAsLocalSystem(); // 設置“登錄為”並選擇了“本地系統”。
            x.StartAutomatically(); // 設置“啟動類型”並選擇了“自動”。
        });

        var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode()); // 我們轉換並返回服務退出代碼。
        Environment.ExitCode = exitCode;
    }
}

2.4 運行應用程序

接着,F5執行應用程序,如果一切順利,你應該會看到類似以下內容的信息:
image

2.5 安裝Windows服務

最后,安裝Windows服務,以管理員身份打開命令行,瀏覽到exe目錄並使用install參數調用它:

S045.Topshelf.ConsoleApp.exe install

現在,您可以在“服務”窗口中簽出新注冊的Windows服務。
image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM