当前位置:首页 » 《关于电脑》 » 正文

如何将.NET 8.0的ASP.NET Core Web API部署成Windows服务

3 人参与  2024年03月30日 13:50  分类 : 《关于电脑》  评论

点击全文阅读


写在前面

前面写了一篇关于将.NET应用转换成Windows服务的方法,其实真正的目的是为了探索如何将Asp.Net Core Web Api 部署成Windows 服务。基于上一篇的基础,只需把创建 WebApplication 的代码放到 BackgroundService 的ExecuteAsync方法中即可。

其中比较重要的一个细节就是需要指定一下配置:

        host.ConfigureAppConfiguration((hostingContext, config) => {
            config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
            config.AddEnvironmentVariables();
        });

appsettings.json 的内容如下:

{  "Logging": {    "LogLevel": {      "Default": "Information",      "Microsoft.AspNetCore": "Warning"    }  },  "AllowedHosts": "*",  "urls": "http://localhost:6001",  "server.urls": "http://localhost:6001"}

重点部分:

  "urls": "http://localhost:6001",
  "server.urls": "http://localhost:6001" 

代码实现

using System.Runtime.InteropServices;using System.Text.Json.Serialization;using Microsoft.Extensions.Hosting;public class Program{    public static void Main(string[] args)    {        CreateHostBuilder(args).Build().Run();    }    public static IHostBuilder CreateHostBuilder(string[] args)    {        var host = Host.CreateDefaultBuilder(args);        //判断当前系统是否为windows        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))        {            host.UseWindowsService();        }        host.ConfigureAppConfiguration((hostingContext, config) => {            config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);            config.AddEnvironmentVariables();        });        return host.ConfigureServices((hostContext, services) =>        {                        services.AddHostedService<WebApp>();        });    }}public class WebApp: BackgroundService{    public void StartApp()    {        var builder = WebApplication.CreateSlimBuilder([]);        builder.Services.ConfigureHttpJsonOptions(options =>        {            options.SerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonSerializerContext.Default);        });        var app = builder.Build();        var sampleTodos = new Todo[] {            new(1, "Walk the dog"),            new(2, "Do the dishes", DateOnly.FromDateTime(DateTime.Now)),            new(3, "Do the laundry", DateOnly.FromDateTime(DateTime.Now.AddDays(1))),            new(4, "Clean the bathroom"),            new(5, "Clean the car", DateOnly.FromDateTime(DateTime.Now.AddDays(2)))        };        var todosApi = app.MapGroup("/todos");        todosApi.MapGet("/", () => sampleTodos);        todosApi.MapGet("/{id}", (int id) =>            sampleTodos.FirstOrDefault(a => a.Id == id) is { } todo                ? Results.Ok(todo)                : Results.NotFound());        app.Run();    }    protected override async Task ExecuteAsync(CancellationToken stoppingToken)    {        StartApp();    }}public record Todo(int Id, string? Title, DateOnly? DueBy = null, bool IsComplete = false);[JsonSerializable(typeof(Todo[]))]internal partial class AppJsonSerializerContext : JsonSerializerContext{}

 项目目录结构:

运行目录结构:

 setup.bat 内容:

sc create MyService binPath= %~dp0AspNetCoreWindowsService.exesc failure MyService actions= restart/60000/restart/60000/""/60000 reset= 86400sc start MyServicesc config MyService start=auto

调用示例

执行setup.bat 

服务被成功创建并运行 

用浏览器访问一下

 

 访问正常,到此结束。

 


点击全文阅读


本文链接:http://zhangshiyu.com/post/88123.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 鹿溪小说(鹿溪)终章+番外(穿进恐怖游戏后,我和反派HE了)一口气阅读
  • 完结文留给儿子的副卡月月刷爆,他却因睡桥底被送进收容所列表_完结文留给儿子的副卡月月刷爆,他却因睡桥底被送进收容所(娄墨霆宋佑轩)
  • 你活着,却死在我等你的第三年后续+番外_谨言佳佳温以宁全集_小说后续在线阅读_无删减免费完结_
  • 相思溺于夏时雨小说(裴景澈初念可)章节目录+起始篇章(相思溺于夏时雨)全章无套路在线
  • 未婚夫重生归来叫停手术,把剥开肚子的我困在手术台上40分钟(裴临渊阮离歌)
  • 完结文离婚是你提,净身出户你又哭什么精彩分享列表_完结文离婚是你提,净身出户你又哭什么精彩分享(苏铭余素伊)
  • 全书浏览哥哥重生救我,我带队灭了组织!(陈致远陈知韫)_哥哥重生救我,我带队灭了组织!(陈致远陈知韫)全书结局
  • 全文算命赚功德,我直接飞升成仙(楚天河林风)列表_全文算命赚功德,我直接飞升成仙
  • 八零丈夫抛妻弃子后悔不当初完整文本_顾尧全文_小说后续在线阅读_无删减免费完结_
  • 殉情三年,侯门主母休夫日百棺开道附加(殉情三年,侯门主母休夫日百棺开道)(沈宁鸢谢挽舟)全本浏览阅读连载中
  • 傅沉舟黎枝小说完整在线阅读(悲风诉尽离别)前传列表
  • 暗恋对象又坏又撩,她招架不住林雾贺景洲佚名

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1