如何優雅的利用Windows服務來部署ASP.NET Core程序

上一篇文章中我給你們講述了五種部署ASP.NET Core網站的方法,其中有一種方式是經過Windows服務來進行部署,這樣既能夠作到開啓自啓動,又不會由於iis的反向代理而損失部分性能。可是美中不足的是須要藉助第三方軟件nssm來進行,那麼有沒有更好而且優雅的方式來進行ASP.NET Core網站的Windows服務方式部署呢?答案是確定的!html

做者:依樂祝
原文連接:http://www.javashuo.com/article/p-rqjbcggm-ha.htmlc#

今天這篇文章我會利用番茄工做法來進行寫做,預計用時四十分鐘。因此,話很少說,開擼吧!windows

  1. 新建一個asp.net core網站項目,以下圖所示我將其命名爲TestAgentasp.net

    1550148209271

  2. 以下所示須要添加兩個Nuget包,這就是大名鼎鼎的NewLife.Core以及NewLife.Agent了ide

    Install-Package NewLife.Core
    Install-Package NewLife.Agent

    安裝後以下所示:函數

    1550148424551

  3. 這時候咱們稍微修改Program 在其中添加一個服務類並繼承自 AgentServiceBase,以下所示:性能

    namespace TestAgent
    {
     public class Program
     {
         protected static string[] _args;
         public static void Main(string[] args)
         {
             _args = args;
             TestAgentServices.ServiceMain();
    
         }
    
         public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
             WebHost.CreateDefaultBuilder(args)
             .UseUrls("http://*:8008")
                 .UseStartup<Startup>();
    
         public class TestAgentServices : AgentServiceBase<TestAgentServices>
         {
             #region 屬性
    
             /// <summary>顯示名</summary>
             public override string DisplayName => "Agent測試服務";
    
             /// <summary>描述</summary>
             public override string Description => "Agent測試服務的描述信息!";
             #endregion
    
             #region 構造函數
             /// <summary>實例化一個代理服務</summary>
             public TestAgentServices()
             {
                 // 通常在構造函數裏面指定服務名
                 ServiceName = "TestAgent";
             }
             #endregion
    
             #region 執行任務
             protected override void StartWork(string reason)
             {
    
                 CreateWebHostBuilder(_args).Build().Run();
                 WriteLog("當前時間{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                 base.StartWork(reason);
             }
             #endregion
         }
     }
    }

    如上所示:咱們重寫下顯示的名字以及描述信息,並把CreateWebHostBuilder(_args).Build().Run(); 移到這個服務的StartWork 方法中.測試

  4. Mian方法中調用TestAgentServices.ServiceMain(); 來引導進入咱們上面新建的服務類。字體

  5. 以管理員身份打開PowerShell,並利用dotnet run 命令以下圖所示運行咱們的程序,看到以下界面:網站

    1550149894931

    如上所示:顯示了當前服務的名稱,描述以及狀態,黃色字體部分列出了對應的操做命令,咱們只須要輸入對應的數據便可進行操做

  6. 咱們這裏直接輸入數字2 來進行安裝服務,以下所示:

    1550150103441

    這時候顯示服務已經安裝,可是還未啓動,這時候咱們能夠打開windows服務窗口找到咱們的Agent測試服務 ,並右鍵屬性看到以下所示:

    1550150258068

    這時候啓動下便可!

  7. 咱們訪問下咱們配置的端口來訪問下網站,以下所示:

    1550150594098

    至此咱們windows服務方式部署成功!
  8. 最後說明一下NewLife.Agent是XAgent的netcore版本,nfx版本集成在NewLife.Core中,也就是說,nfx下只須要引用NewLife.Core便可,對Windows兼容性更好。
    NewLife.Agent獨立是爲了準備支持Linux

總結

今天利用NewLife.Agent來演示如何優雅的進行ASP.NET Core程序的部署,固然對於控制檯程序也是支持的!大夥也能夠抽空試一下!最後,我只想說一句.NET Core的生態真的愈來愈好了,好用的東西太多太多了!同時這篇文章總共花費了三十八分鐘,看來番茄工做法仍是很高效的!若是你有興趣的話能夠加入.NET Core實戰項目千人羣637326624 跟更多的.NETCorer一塊兒交流!

相關文章
相關標籤/搜索