Asp.net-Core

MVC 6 作為 Windows 服務安裝 (ASP.NET Core 1.0.0)

  • July 26, 2016

更新 - 2016 年 7 月 26 日

我在ASP.NET Core 1.0.0下面的答案中添加了解決方案。


我創建了一個簡單的 MVC 6 應用程序並包含了 Microsoft.AspNet.WebListener 庫,因此我可以在 IIS 之外託管。

來自 project.json:

"dependencies": {
   "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4",
   "Microsoft.AspNet.Mvc": "6.0.0-beta4"
},

"commands": {
   "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"
}

當我發布它時,我可以執行 web.cmd 文件並讓站點在控制台視窗中執行。偉大的!

但在 OWIN 中,您可以使用 TopShelf 從控制台應用程序啟動您的 Web 應用程序。然後可以將其建構為執行檔並作為 Windows 服務安裝。

有沒有辦法使用 ASP.NET 5 MVC 6 Web 應用程序來做到這一點?

從最新的 ASP.NET Core 版本 1.0.0 庫開始,這現在有所簡化。

ASP.NET GitHub 頁面上有關於此主題的公開討論。

所有 ASP.NET Core 應用程序現在都是控制台應用程序,並且有一個新庫可以作為 Windows 服務託管,該服務在完整的 .NET 框架上執行(這是有道理的,因為整個問題都假設​​一個 Windows Web 伺服器)。

我們需要創建一個新的ASP.NET Core Web Application (.NET Framework)

檢查project.json文件以確保“框架”部分如下:

"frameworks": {
   "net461": {}
},

然後我們需要添加服務託管庫Microsoft.AspNetCore.Hosting.WindowsServices並保存project.json以恢復包。

然後我們需要編輯program.cs文件並添加在調試中執行和作為服務執行的路徑,程式碼如下:

   public static void Main(string[] args)
   {
       var isDebug = Debugger.IsAttached || ((IList)args).Contains("--debug");
       string runPath;

       if (isDebug)
           runPath = Directory.GetCurrentDirectory();
       else
       {
           var exePath = Process.GetCurrentProcess().MainModule.FileName;
           runPath = Path.GetDirectoryName(exePath);
       }

       var host = new WebHostBuilder()
                       .UseKestrel()
                       .UseContentRoot(runPath)
                       .UseStartup<Startup>()
                       .Build();

       if (isDebug)
           host.Run();
       else
           host.RunAsService();
   }

.RunAsService()方法是Microsoft.AspNetCore.Hosting.WindowsServiceslib提供的擴展方法。

要安裝為服務,您只需從管理員命令提示符處執行以下命令:

SC Create <service-name> binPath= "[PublishOutputPath]\mvc6-example.exe"

請在我的GitHub 儲存庫中複製並查看工作版本。

我希望這有幫助 :)

您可以將 DNX 應用程序作為 Windows 服務執行,但是不能直接執行 CMD 文件。您將收到一條錯誤消息:“服務未及時響應啟動或控制請求。” 您可以直接指向 dnx.exe 並將項目文件夾和命令作為參數傳遞。

閱讀這篇文章了解更多詳情:http ://taskmatics.com/blog/run-dnx-applications-windows-service/

一旦你設置了你的應用程序。您可以從服務的 OnStart 方法引導 ASP.NET。為此,您可以使用 Microsoft.AspNet.Hosting 中的 WebHostBuilder。

最後,您可以通過將參數(例如“非服務”)傳遞給 Main 方法並在呼叫 ServiceBase.Run 之前檢查它,如果存在,您可以直接呼叫 OnStart,以確保應用程序仍然可以在 VS 中執行。項目的屬性讓您可以選擇在 VS 中執行時傳遞參數。

更新:

有一個後續文章建立在上述文章的基礎上。它展示瞭如何在 Windows 服務中執行帶有靜態文件的 ASP.NET 5 和 MVC 6。連結在這裡:http ://taskmatics.com/blog/host-asp-net-in-a-windows-service/

引用自:https://stackoverflow.com/questions/30277991