wanshenmean
2026-03-30 f1f9549a8393ce67f01dbb560ecec3e375564739
Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs
@@ -1,5 +1,3 @@
using System.Reflection;
using System.Text;
using Autofac;
using Autofac.Core;
using Autofac.Extensions.DependencyInjection;
@@ -11,6 +9,10 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using Serilog;
using Serilog.Formatting.Json;
using System.Reflection;
using System.Text;
using WIDESEA_Core;
using WIDESEA_Core.Authorization;
using WIDESEA_Core.BaseServices;
@@ -27,31 +29,59 @@
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureContainer<ContainerBuilder>(builder =>
{
    builder.RegisterModule<AutofacModuleRegister>();//���нӿڲ�ķ���ע��
    builder.RegisterModule<AutofacPropertityModuleReg>();//
    builder.RegisterModule<AutofacModuleRegister>(); // 注册接口依赖注入
    builder.RegisterModule<AutofacPropertityModuleReg>(); // 注册属性注入
}).ConfigureAppConfiguration((hostingContext, config) =>
{
    hostingContext.Configuration.ConfigureApplication();
    config.Sources.Clear();
    config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
}); ;
});
builder.Host.UseSerilog((context, services, loggerConfiguration) =>
{
    loggerConfiguration
        .ReadFrom.Configuration(context.Configuration)
        .ReadFrom.Services(services)
        //.Enrich.FromLogContext()
        .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}")
        .WriteTo.File(
            //new JsonFormatter(renderMessage: true),
            "logs/serilog-.log",
            outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}",
            rollingInterval: RollingInterval.Day,
            retainedFileCountLimit: 30,
            // 每个日志文件最大大小(字节),此处设置为10MB
            fileSizeLimitBytes: 10 * 1024 * 1024,
            shared: true
            )
         // 6. 可选:输出到Seq日志服务器(结构化日志服务器)
         // 需要安装 Serilog.Sinks.Seq NuGet包,并确保Seq服务在 http://localhost:5341 运行
         // 如不需要Seq日志,注释掉下方代码即可
         .WriteTo.Seq(
             serverUrl: "http://localhost:5341",
             apiKey: "CWVa8UWQ9CdUp9GWXCPL", // 如Seq需要ApiKey则配置真实密钥
             batchPostingLimit: 1000, // 批量发送数量
             period: TimeSpan.FromSeconds(2) // 发送间隔
         );
});
builder.ConfigureApplication();
//App.ExpDateTime = DateTime.Parse("2025-03-31 00:00:00");//����ʱ��
// App.ExpDateTime = DateTime.Parse("2025-03-31 00:00:00"); // 设置过期时间
// 2�����÷���
builder.Services.AddSingleton(new AppSettings(builder.Configuration));//ע��
builder.Services.AddAllOptionRegister();//��ȡ�����ļ�
// 2. 配置服务
builder.Services.AddSingleton(new AppSettings(builder.Configuration)); // 注册配置
builder.Services.AddAllOptionRegister(); // 获取配置文件
builder.Services.AddSingleton<RoundRobinService>();
builder.Services.Configure<AutoOutboundTaskOptions>(
    builder.Configuration.GetSection("AutoOutboundTask"));
builder.Services.AddMemoryCacheSetup();//����
builder.Services.AddMemoryCacheSetup(); // 缓存服务
builder.Services.AddWebSocketSetup();
builder.Services.AddSqlsugarSetup();//SqlSugar ��������
builder.Services.AddDbSetup();//Db ��������
builder.Services.AddInitializationHostServiceSetup();//Ӧ�ó�ʼ������ע��
builder.Services.AddHostedService<AutoOutboundTaskBackgroundService>();
//builder.Services.AddHostedService<PermissionDataHostService>();//����Ȩ��
builder.Services.AddSqlsugarSetup(); // SqlSugar 数据库配置
builder.Services.AddDbSetup(); // Db 数据库配置
builder.Services.AddInitializationHostServiceSetup(); // 应用程序初始化服务注册
builder.Services.AddHostedService<AutoOutboundTaskBackgroundService>();  // 启动自动出库任务后台服务
// builder.Services.AddHostedService<PermissionDataHostService>(); // 权限数据服务
builder.Services.AddAutoMapperSetup();
builder.Services.AddCorsSetup();
@@ -73,7 +103,7 @@
builder.Services.AddAuthorizationSetup();
builder.Services.AddIpPolicyRateLimitSetup(builder.Configuration);//IPLimit���� ��������
builder.Services.AddIpPolicyRateLimitSetup(builder.Configuration); // IP限流 中间件注册
builder.Services.AddScoped<UseServiceDIAttribute>();
@@ -83,7 +113,7 @@
builder.Services.AddControllers(o =>
{
    o.Filters.Add(typeof(GlobalExceptionsFilter));//ȫ���쳣
    o.Filters.Add(typeof(GlobalExceptionsFilter)); // 全局异常处理
})
.AddNewtonsoftJson(options =>
{
@@ -104,20 +134,20 @@
var app = builder.Build();
// 3�������м��
app.UseMiniProfiler();//���ܷ�����
app.ConfigureApplication();//�����ļ�
app.UseApplicationSetup();//��������
// 3. 配置中间件
app.UseMiniProfiler(); // 性能分析
app.ConfigureApplication(); // 应用配置
app.UseApplicationSetup(); // 应用启动
app.UseAllServicesMiddle(builder.Services);
app.UseSession();
app.UseSwaggerAuthorized();
app.UseSwaggerMiddle(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("WIDESEA_WMSServer.index.html") ?? throw new Exception("WIDESEA_WMSServer.index.html�ļ�"));
app.UseSwaggerMiddle(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("WIDESEA_WMSServer.index.html") ?? throw new Exception("WIDESEA_WMSServer.index.html文件不存在"));
app.UseIpLimitMiddle();
app.UseApiLogMiddleware();
//todo
//app.UseRecordAccessLogsMiddle();
// todo
// app.UseRecordAccessLogsMiddle();
DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions();