【问题标题】:Host ASP (.NET 6) in a Windows Service在 Windows 服务中托管 ASP (.NET 6)
【发布时间】:2022-01-03 21:51:38
【问题描述】:

我目前正在使用 WebHost 和 WebHostBuilder 在 Windows 服务中托管 ASP.NET (.NET 5) 应用程序。

.NET 6 引入了 WebApplication 和 WebApplicationBuilder。如何使用它们在 Windows 服务中托管?

【问题讨论】:

  • 与您使用WebHost/WebHostBuilder的方式相同。
  • @GuruStron 这是用于在 Windows 服务中托管的 .NET 源代码。如您所见,它基于 IWebHost。你能告诉我如何使用 WebApplication 而不是 IWebHost 吗? github.com/dotnet/aspnetcore/blob/…

标签: asp.net-core windows-services .net-6.0


【解决方案1】:

您将使用此处记录的 UseWindowsService() 扩展方法:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-6.0&tabs=visual-studio#app-configuration

与以前的版本一样,您需要安装Microsoft.Extensions.Hosting.WindowsServices NuGet 包。

在 .NET 6 中使用 WebApplicationBuilder 实现这一点需要一种解决方法:

var webApplicationOptions = new WebApplicationOptions() { ContentRootPath = AppContext.BaseDirectory, Args = args, ApplicationName = System.Diagnostics.Process.GetCurrentProcess().ProcessName };
var builder = WebApplication.CreateBuilder(webApplicationOptions);

builder.Host.UseWindowsService();

【讨论】:

  • 谢谢@aweyeahdawg 但如果我没记错的话,那篇文章展示了如何使用 IHostBuilder 而我想使用 WebApplicationBuilder。
  • 我用您需要添加的代码更新了我的答案
  • 看起来很有希望@aweyeahdawg 会尝试并接受答案,如果它有效。
  • 谢谢@aweyeahdawg 您的回答有效,但有一个技巧。调用 UseWindowsService() 会更改使用 WebApplicationBuilder.Host 不支持的内容根。我必须这样做:WebApplicationOptions webApplicationOptions = new() { ContentRootPath = AppContext.BaseDirectory, Args = args, ApplicationName = System.Diagnostics.Process.GetCurrentProcess().ProcessName }; var builder = WebApplication.CreateBuilder(webApplicationOptions); builder.Host.UseWindowsService();
  • @Sandy 这就是我要找的。拥有其他一切,但无法弄清楚到底发生了什么。
猜你喜欢
  • 2011-06-24
  • 2021-10-04
  • 2011-03-23
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多