Windows 服务中托管的 Blazor 服务器应用
Blazor server app hosted in Windows service
我们如何将 Blazor 服务器应用程序托管为 Windows 服务?使用本文作为指南:
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-6.0
我们使用 dotnet 版本 6.0 创建了一个最小示例。首先从模板创建一个 Blazor 服务器应用程序。
dotnet new blazorserver
然后为 Microsoft.Extensions.Hosting.WindowsServices
添加 NuGet 包
dotnet add package Microsoft.Extensions.Hosting.WindowsServices
在 Program.cs
中,将主机配置为 运行 作为 Windows 服务。
//...
builder.Services.AddSingleton<WeatherForecastService>();
// Configure to run as Windows service
builder.Host.UseWindowsService();
var app = builder.Build();
//...
将应用发布为可执行文件。
dotnet publish -c Release -r win-x64 --self-contained false
将 /bin/Release/net6.0/win-x64/publish/ 文件夹中的内容复制到服务器。在服务器上,从命令行 cd 到包含 exe 和 运行 exe 的文件夹。
PS C:\inetpub\wwwroot\TestBlazor> .\blazor-server-as-service.exe
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\inetpub\wwwroot\TestBlazor\
info: Microsoft.Hosting.Lifetime[0]
成功。
配置新的 windows 服务。
New-service -Name "TestBlazorService" -BinaryPathName C:\inetpub\wwwroot\TestBlazor\blazor-server-as-service.exe
编辑服务以使用我的凭据。授予以服务身份登录的权限。启动服务。
PS> start-service TestBlazorService
start-service : Service 'TestBlazorService (TestBlazorService)' cannot be started due to the following error: Cannot
start service TestBlazorService on computer '.'.
At line:1 char:1
+ start-service TestBlazorService
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service],
ServiceCommandException
+ FullyQualifiedErrorId : CouldNotStartService,Microsoft.PowerShell.Commands.StartServiceCommand
来自事件日志:
A timeout was reached (30000 milliseconds) while waiting for the TestBlazorService service to connect.
The TestBlazorService service failed to start due to the following error:
The service did not respond to the start or control request in a timely fashion.
我错过了什么?
这比我想承认的要长得多。 blazorserver 模板创建了一个 WebApplicationBuilder
.
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<IDependencyRepository, DependencyRepository>();
var app = builder.Build();
我试图访问和配置 IHostBuilder
成员,然后构建并使用 WebBuilder
。
//...
builder.Services.AddSingleton<WeatherForecastService>();
// Configure to run as Windows service
builder.Host.UseWindowsService();
var app = builder.Build();
我对 asp.net 主机模型的理解不是很好,但我认为我需要创建一个 IHostBuilder
的实例,将其配置为 运行 作为服务,然后配置其中的 IWebHostBuilder
用于所有与网络相关的设置。然后实际构建 IHostBuilder
- 我配置为 运行 作为服务的东西。
我添加了一个 Startup
class 来处理网络配置,并将 Program.cs
更改为:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>())
.UseWindowsService()
.Build()
.Run();
安装在服务器上。服务成功启动并 运行s。也许有更好的方法。如果没有,我希望这会对其他人有所帮助。
我们如何将 Blazor 服务器应用程序托管为 Windows 服务?使用本文作为指南:
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-6.0
我们使用 dotnet 版本 6.0 创建了一个最小示例。首先从模板创建一个 Blazor 服务器应用程序。
dotnet new blazorserver
然后为 Microsoft.Extensions.Hosting.WindowsServices
添加 NuGet 包dotnet add package Microsoft.Extensions.Hosting.WindowsServices
在 Program.cs
中,将主机配置为 运行 作为 Windows 服务。
//...
builder.Services.AddSingleton<WeatherForecastService>();
// Configure to run as Windows service
builder.Host.UseWindowsService();
var app = builder.Build();
//...
将应用发布为可执行文件。
dotnet publish -c Release -r win-x64 --self-contained false
将 /bin/Release/net6.0/win-x64/publish/ 文件夹中的内容复制到服务器。在服务器上,从命令行 cd 到包含 exe 和 运行 exe 的文件夹。
PS C:\inetpub\wwwroot\TestBlazor> .\blazor-server-as-service.exe
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\inetpub\wwwroot\TestBlazor\
info: Microsoft.Hosting.Lifetime[0]
成功。
配置新的 windows 服务。
New-service -Name "TestBlazorService" -BinaryPathName C:\inetpub\wwwroot\TestBlazor\blazor-server-as-service.exe
编辑服务以使用我的凭据。授予以服务身份登录的权限。启动服务。
PS> start-service TestBlazorService
start-service : Service 'TestBlazorService (TestBlazorService)' cannot be started due to the following error: Cannot
start service TestBlazorService on computer '.'.
At line:1 char:1
+ start-service TestBlazorService
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service],
ServiceCommandException
+ FullyQualifiedErrorId : CouldNotStartService,Microsoft.PowerShell.Commands.StartServiceCommand
来自事件日志:
A timeout was reached (30000 milliseconds) while waiting for the TestBlazorService service to connect.
The TestBlazorService service failed to start due to the following error:
The service did not respond to the start or control request in a timely fashion.
我错过了什么?
这比我想承认的要长得多。 blazorserver 模板创建了一个 WebApplicationBuilder
.
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<IDependencyRepository, DependencyRepository>();
var app = builder.Build();
我试图访问和配置 IHostBuilder
成员,然后构建并使用 WebBuilder
。
//...
builder.Services.AddSingleton<WeatherForecastService>();
// Configure to run as Windows service
builder.Host.UseWindowsService();
var app = builder.Build();
我对 asp.net 主机模型的理解不是很好,但我认为我需要创建一个 IHostBuilder
的实例,将其配置为 运行 作为服务,然后配置其中的 IWebHostBuilder
用于所有与网络相关的设置。然后实际构建 IHostBuilder
- 我配置为 运行 作为服务的东西。
我添加了一个 Startup
class 来处理网络配置,并将 Program.cs
更改为:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>())
.UseWindowsService()
.Build()
.Run();
安装在服务器上。服务成功启动并 运行s。也许有更好的方法。如果没有,我希望这会对其他人有所帮助。