首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET核心.NET 6预览版7 Windows服务

ASP.NET核心.NET 6预览版7 Windows服务
EN

Stack Overflow用户
提问于 2021-09-09 20:21:51
回答 2查看 3.3K关注 0票数 10

我用Visual Studio2022预览版创建了一个新的Windows项目,并尝试将其作为ASP.NET服务运行。我下载了最新的Microsoft.Extensions.Hosting.WindowsServices包(6.0.0-preview.7.21377.19)。

在进行在线搜索时,函数.UseWindowsService()进入CreateHostBuilder方法。但在新的模板中,它看起来不同。我不明白在新模板中应该在哪里调用.UseWindowsService。这是我当前的代码,看起来服务正在启动,但是当我浏览到localhost:5000时,它给出了404错误

代码语言:javascript
复制
using Microsoft.OpenApi.Models;
using Microsoft.Extensions.Hosting.WindowsServices;

var builder = WebApplication.CreateBuilder(args);

builder.Host.UseWindowsService(); // <--- Added this line

// Add services to the container.

builder.Services.AddControllers();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new() { Title = "MyWindowsService", Version = "v1" });
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (builder.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
        app.UseSwagger();
    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyWindowsService v1"));
}

app.UseAuthorization();

app.MapControllers();


app.Run();

我像这样发布了我的服务exe

代码语言:javascript
复制
dotnet publish -c Release -r win-x64 --self-contained
EN

回答 2

Stack Overflow用户

发布于 2021-11-19 14:40:25

因为简单地使用

代码语言:javascript
复制
builder.Host.UseWindowsService();

不能与WebApplication.CreateBuilder() (see)一起使用,而是会抛出异常

代码语言:javascript
复制
Exception Info: System.NotSupportedException: The content root changed from "C:\Windows\system32\" to "...". Changing the host configuration using WebApplicationBuilder.Host is not supported. Use WebApplication.CreateBuilder(WebApplicationOptions) instead.

或者更确切地说,将导致此错误

代码语言:javascript
复制
Start-Service : Service 'Service1 (Service1)' cannot be started due to the following error: Cannot start service Service1 on computer '.'.

尝试在PowerShell中使用 start - Service 启动服务时,我发现了一种适用于我的解决方法

代码语言:javascript
复制
using Microsoft.Extensions.Hosting.WindowsServices;

var options = new WebApplicationOptions
{
    Args = args,
    ContentRootPath = WindowsServiceHelpers.IsWindowsService() ? AppContext.BaseDirectory : default
};

var builder = WebApplication.CreateBuilder(options);

builder.Host.UseWindowsService();

这里:An asp.net core web api application, using "UseWindowsService", reports an error “System.NotSupportedException: The content root changed. Changing the host configuration is not supported ” when starting the service

票数 14
EN

Stack Overflow用户

发布于 2021-10-05 11:30:54

以下代码将生存期设置为WindowsServiceLifetime并启用到事件日志的日志记录。在大多数情况下,这应该是您将应用程序作为Windows服务运行所需的全部内容。

代码语言:javascript
复制
if (WindowsServiceHelpers.IsWindowsService())
{
    appBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>();
    appBuilder.Logging.AddEventLog(settings =>
    {
        if (string.IsNullOrEmpty(settings.SourceName))
        {
            settings.SourceName = appBuilder.Environment.ApplicationName;
        }
    });
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69124310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档