中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用.NET Core3.0創建一個Windows服務的方法

發布時間:2020-09-20 08:00:05 來源:腳本之家 閱讀:215 作者:Rwing 欄目:編程語言

在.NET Core 3.0 中,我們引入了一種名為 Worker Service 的新型應用程序模板。此模板旨在為您在 .NET Core 中編寫長時間運行的服務的提供一個起點。在本演練中,我們將創建一個 worker 并將其作為 Windows 服務運行。

創建一個 Worker

注意:在我們的預覽版中,worker 模板與 Web 模板位于同一級菜單中。這將在未來的版本中發生變化。我們打算將 Worker Service 模板直接放在“創建新項目”菜單中。

在 Visual Studio 中創建 Worker

使用.NET Core3.0創建一個Windows服務的方法

使用.NET Core3.0創建一個Windows服務的方法

使用.NET Core3.0創建一個Windows服務的方法

在命令行中創建 Worker

運行 dotnet new worker

使用.NET Core3.0創建一個Windows服務的方法

作為 Windows 服務運行

為了作為 Windows 服務運行,我們需要我們的 worker 監聽來自 ServiceBase 的啟動停止信號,該類型將 Windows 服務系統暴露給 .NET 應用程序。要做到這一點,我們希望:

添加 Microsoft.Extensions.Hosting.WindowsServices NuGet 包

使用.NET Core3.0創建一個Windows服務的方法

在 Program.cs 的 HostBuilder 中添加對 UseServiceBaseLifetime 的調用

public class Program
{
  public static void Main(string[] args)
  {
    CreateHostBuilder(args).Build().Run();
  }

  public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
      .UseServiceBaseLifetime()
      .ConfigureServices(services =>
      {
        services.AddHostedService<Worker>();
      });
}

這個方法做了兩件事。首先,它檢查應用程序是否真正的作為 Windows 服務運行,如果不是,那么它什么都不做,這使得這個方法很安全,當本地運行或作為 Windows 服務運行時。您不需要向其添加保護語句,只需在未作為 Windows 服務安裝時正常運行應用程序即可。

其次,它將配置 host 使用 ServiceBaseLifetime。 ServiceBaseLifetime 與 ServiceBase 一起使用,以幫助控制作為 Windows 服務運行時應用程序的生命周期。這會覆蓋處理 CTRL + C 等信號的默認的 ConsoleLifetime 。

安裝 Worker

一旦我們的 worker 使用 ServiceBaseLifetime,我們就需要安裝它:

首先,讓我們發布應用程序。如果我們立刻安裝了 Windows 服務,這意味著只要服務運行,exe 就會被鎖定。發布這一步是個很好的方法, 以確保我需要運行服務的所有文件都在一個位置, 并準備好安裝。

dotnet publish -o c:\code\workerpub

然后我們就可以在命令行中使用 sc 命令來安裝

sc create workertest binPath=c:\code\workerpub\WorkerTest.exe

例如:

使用.NET Core3.0創建一個Windows服務的方法

安全說明:此命令將服務使用 local system 運行,這通常不是您想要做的事情。相反,您應該創建一個服務帳戶并以該帳戶運行 Windows 服務。我們不會在這里討論這個問題,但是有一些文檔在這里討論它: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.2

日志

日志記錄系統有 Event Log 的提供程序,可以將日志消息直接發送到 Windows 事件日志。安裝 Microsoft.Extensions.Logging.EventLog 并修改 Program.cs :

public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
    .ConfigureLogging(loggerFactory => loggerFactory.AddEventLog())
    .ConfigureServices(services =>
    {
      services.AddHostedService<Worker>();
    });

未來工作

在即將到來的預覽版中,我們計劃通過以下方式改善使用 Worker 的體驗:

  • 將 UseWindowsServiceBaseLifetime 重命名為 UseWindowsService
  • 作為 Windows 服務運行時,自動的集成 Event Log 日志。

結論

我們希望您試用這個新模板,并希望您告訴我們它有什么問題,您可以在此處提出任何錯誤或建議:

https://github.com/aspnet/AspNetCore/issues/new/choose 譯者注

原文作者在評論中提到,下一篇文章將講解如何在 Linux/Unix 中創建服務

原文: .NET Core Workers as Windows Services

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

班戈县| 沙坪坝区| 宁蒗| 阳泉市| 高安市| 双鸭山市| 巴青县| 济南市| 长春市| 延边| 康乐县| 勃利县| 交口县| 塔城市| 云安县| 大理市| 万荣县| 漯河市| 双流县| 化隆| 云安县| 仲巴县| 时尚| 永年县| 牡丹江市| 鄂托克旗| 车险| 彩票| 壤塘县| 衡东县| 建瓯市| 邯郸县| 新津县| 镇平县| 彰化县| 万州区| 锡林郭勒盟| 南部县| 阿坝| 灌南县| 丹凤县|