MVC 6 作為 Windows 服務安裝 (ASP.NET Core 1.0.0)
更新 - 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/