using CompServ.Worker; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Console; using System; using CompServ.ClientLibrary; using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Http.Features; if (args.Length > 0) { StatusHolder.HubServer = args[0]; if (args.Length > 1 && int.TryParse(args[1], out var ratioArg) && ratioArg > 1) StatusHolder.Ratio = ratioArg; } var builder = WebApplication.CreateBuilder(args); //控制台日志格式 builder.Services.AddLogging(opt => { opt.AddSimpleConsole(p => { p.TimestampFormat = "[dd HH:mm:ss] "; p.SingleLine = true; p.ColorBehavior = LoggerColorBehavior.Enabled; }); }); builder.Services.Configure(options => { options.AddFilter((category, level) => { if (level == LogLevel.Debug) return false; if (level == LogLevel.Trace) return false; if (category == "Microsoft.AspNetCore.Hosting.Diagnostics" && level == LogLevel.Information) return false; if (category == "Microsoft.AspNetCore.Routing.EndpointMiddleware" && level == LogLevel.Information) return false; if (category == "Microsoft.AspNetCore.Server.Kestrel" && level == LogLevel.Information) return false; if (category == "Microsoft.AspNetCore.Server.Kestrel.Http2" && level == LogLevel.Information) return false; if (category == "Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker" && level == LogLevel.Information) return false; if (category == "Microsoft.AspNetCore.Mvc.Infrastructure.ContentResultExecutor" && level == LogLevel.Information) return false; if (category == "Microsoft.AspNetCore.Mvc.Infrastructure.FileStreamResultExecutor" && level == LogLevel.Information) return false; return true; // 其他日志保留 }); }); //配置HTTP1、HTTP2端口 builder.WebHost.UseKestrel((_, kso) => { kso.ListenAnyIP(0, lo => lo.Protocols = HttpProtocols.Http2); kso.ListenAnyIP(0, lo => lo.Protocols = HttpProtocols.Http1); }); builder.Services.Configure(options => { options.Limits.MaxRequestBodySize = 100 * 1024 * 1024; // 设置最大请求体大小 100MB }); try { Console.Title = "..."; builder.Services.AddHostedService(); } catch { //EAT ERR } if (StatusHolder.HubServer != null) builder.Services.AddSingleton(); builder.Services.AddControllers(); var app = builder.Build(); app.Use(async (context, next) => { context.Request.EnableBuffering(); // this used to be EnableRewind await next(context); }); app.MapControllers(); app.MapGet("/", () => "I am worker!"); await app.StartAsync(); // ↑↓ await app.RunAsync(); { var logger = app.Services.GetRequiredService>(); logger.LogInformation("Self check..."); var svr = app.Services.GetRequiredService(); var saf = svr.Features.GetRequiredFeature(); var listeningPort = new Uri(saf.Addresses.First()).Port; var client = new CompServWorkerClient("http://localhost:" + listeningPort); var r = await client.CheckAliveAsync(); logger.LogInformation("Self check resunt: " + r); } var hubRegister = app.Services.GetService(); await (hubRegister?.Register() ?? Task.CompletedTask); await app.WaitForShutdownAsync(); await (hubRegister?.UnRegister() ?? Task.CompletedTask);