提问人:sea-wave 提问时间:11/8/2023 最后编辑:marc_ssea-wave 更新时间:11/9/2023 访问量:111
在 Windows 服务中托管 ASP.NET CoreHost Core in a Windows Service
Host ASP.NET Core in a Windows Service
问:
我有一个问题来自官方网站:https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-7.0&tabs=visual-studio
本文旨在教人们发布作为 Windows 服务运行 ASP.NET Core 项目。
我认为有两部分:一部分是工人服务项目,另一部分是 ASP.NET 核心项目,这篇文章说你应该建立一个工人服务项目。
然后进行应用配置,如以下屏幕截图所示:
我认为 ASP.NET Core 项目中的图像中包含的代码,我不知道 worker service 项目和 ASP.NET Core 项目之间的关系,所以我不知道如何将 ASP.NET Core 项目发布到 Windows 服务,谁能告诉我一些关于这一点的事情?
答:
1.简单的方法:创建一个 Asp.net 核心MVC项目
1.添加软件包Microsoft.Extensions.Hosting.WindowsServices
2.添加程序.csbuilder.Services.AddWindowsService();
3.将其部署为单个文件并将其注册为 Windows 服务,如下所示,您可以在第 2 节中找到详细步骤。
技巧
如果我们将其部署为 Windows 服务,它将在 kestrel 上运行,最好在代码中定义端口。
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.ListenAnyIP(5000); // http
});
2. 创建 Worker Server 项目
Panagiotis Kanavos的评论是正确的。辅助角色服务项目是 Windows 服务中使用的简化项目模板。
你可以按照我的步骤让 worker 服务支持 mvc 等功能。
1.创建文件夹和文件,如mvc项目
2.添加 .Microsoft.AspNetCore.App
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>dotnet-WorkerService1-d5189c80-2268-4d3c-9c71-bf06594ee612</UserSecretsId>
<RazorCompileOnPublish>true</RazorCompileOnPublish>
<RazorCompileOnBuild>true</RazorCompileOnBuild>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.1" />
</ItemGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
<ItemGroup>
<Folder Include="Views\Home\" />
<Folder Include="Views\Shared\" />
</ItemGroup>
</Project>
3.程序.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using System.Diagnostics;
namespace WorkerService1
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.ListenAnyIP(5000); // http
});
builder.Services.AddControllersWithViews();
builder.Services.AddWindowsService();
builder.Services.AddHostedService<Worker>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
//IHost host = Host.CreateDefaultBuilder(args)
// .ConfigureServices(services =>
// {
// services.AddHostedService<Worker>();
// })
// .Build();
//host.Run();
}
}
}
===更新===
4.将项目SDK更改为Web,然后我们会发现项目图标将更改,我们需要重新加载项目。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>dotnet-WorkerService1-d5189c80-2268-4d3c-9c71-bf06594ee612</UserSecretsId>
<RazorCompileOnPublish>true</RazorCompileOnPublish>
<RazorCompileOnBuild>true</RazorCompileOnBuild>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.1" />
</ItemGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
<ItemGroup>
<Folder Include="wwwroot\" />
<Folder Include="Views\Home\" />
<Folder Include="Views\Shared\" />
</ItemGroup>
</Project>
4.然后我们需要将应用程序发布为单个文件。
5.创建 Windows 服务并手动启动它
6.检查端口 5000。
评论
.AddWindowsService()
InvalidOperationException: The view 'Privacy' was not found