.NET 5學習筆記(11)—— Host Blazor WebAssembly in a Windows Service


實在是被某軟忽悠瘸了,憤而寫此一篇。希望能讓同樣需求的同學們少走彎路。
某軟在《在 Windows 服務中托管 ASP.NET Core》中,介紹了通過創建Worker Service工程,來將.NET Core和.NET 5的程序以Windows Service的形式運行。但是某軟你得說明,托管ASP.NET Core Web Application,並不需要額外創建一個Worker Service工程啊,再加上GitHub上兩個放在一塊的sample project,直接把我誤導瘸了……
今天我就要記錄一下這個事情,其實是多么的簡單,控訴某軟文檔不走心。
接下來讓我們實踐一把。根據劇情需要,這里應該是一個Blazor WebAssembly App。

記得勾選ASP.NET Core hosted,會為我們額外創建一個用於Host的ASP.NET Core Web Application。如果不新建Web Application,同時也沒有可用的Web Application,單一的Blazor WebAssembly App是沒有辦法使用Windows Service托管的。

Create按鈕點擊下去,只見Visual Studio一通操作,建了三個工程。我們穩住不要慌,按F5運行,現在的情況是下圖這個樣子。左邊是我們新建的Blazor App在瀏覽器里跑起來的樣子。右側的Solution Explorer中,BlazorHostInWinService.Client是程序的主體,所有的Page都在這里畫。BlazorHostInWinService.Server是一個簡單的WebApi工程,其中的WeatherForecastController提供了給Blazor Fetch Data頁面測試用的天氣數據。至於最下面的Shared工程,可以理解為Client和Server之間傳遞數據,共享所使用的DTO對象,在該示例中,僅有一個Class WeatherForecast。

當前我們的程序是通過IIS Express來運行的,接着我們要把該工程通過Windows Service來托管運行。首先需要給BlazorHostInWinService.Server工程添加NuGet包 Microsoft.AspNetCore.Hosting.WindowsServices。再打開Program.cs文件,為IHostBuilder對象添加對UseWindowsService方法的調用。

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

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .UseWindowsService()
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

額,好像也沒有其他事情可以做了,讓我們publish該項目。依然是選擇BlazorHostInWindowsService.Server工程,右鍵菜單中的publish點擊后,出現如下界面,選擇Folder后點擊Finish。

在如下圖的界面中,再一次開心的點擊publish。編譯過程中我們可以摸會魚,直到在Output窗口中出現迷人的信息:
========== Build: 3 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========

然后讓我們打開Target location,即bin\Release\net5.0\publish\。把所有的文件都拷貝到我們希望部署的位置,比如C:\Users\xingzheng\Documents\BlazorWinService文件夾。
最后就是創建Windows Service了,我們打開具有admin權限的CMD窗口。鍵入

sc create FirstBlazorAppService binPath="C:\Users\dell\Documents\BlazorWinService\BlazorInWinServiceTest1.Server.exe"

此時我們打開Windows Services的界面,啟動FirstBlazorAppService即可。再返回到瀏覽器輸入http://localhost:5000

標題是我在Index.razor文件中手動改的,也為了區別之前通過IIS Express運行的頁面。
本篇就到這里,簡單地介紹了如何將Blazor App通過Windows Service托管。
GitHub:
https://github.com/manupstairs/BlazorHostInWinService


免責聲明!

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



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