using System; using Autofac.Extensions.DependencyInjection; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Configuration; using Serilog; using MediatR; using IRaCIS.Core.Application.MediatR.Handlers; using System.Threading.Tasks; using MassTransit; using MassTransit.NewIdProviders; using System.IO; using Newtonsoft.Json.Linq; using System.Security.Cryptography; using IRaCIS.Core.Infrastructure; using System.Net.NetworkInformation; using System.Linq; using System.Text.Json.Nodes; using Microsoft.EntityFrameworkCore; using IRaCIS.Core.Infra.EFCore; using Microsoft.Data.SqlClient; namespace IRaCIS.Core.API { public class Program { public readonly string environment; public static async Task Main(string[] args) { try { //以配置文件为准,否则 从url中取环境值(服务以命令行传递参数启动,配置文件配置了就不需要传递环境参数) var config = new ConfigurationBuilder() .AddEnvironmentVariables() .Build(); var enviromentName = config["ASPNETCORE_ENVIRONMENT"]; if (string.IsNullOrWhiteSpace(enviromentName)) { var index = Array.IndexOf(args, "--env"); enviromentName = index > -1 ? args[index + 1] : "Development"; } //Dicom 浏览 //ImageManager.SetImplementation(WinFormsImageManager.Instance); var host = CreateHostBuilder(args) .UseEnvironment(enviromentName) //命令行传入环境 .ConfigureAppConfiguration((hostContext, config) => { //Console.WriteLine(hostContext.HostingEnvironment.EnvironmentName); config.AddJsonFile("appsettings.json", false, true) .AddJsonFile($"appsettings.{enviromentName}.json", false, true); }) .Build(); NewId.SetProcessIdProvider(new CurrentProcessIdProvider()); //// Serilog SerilogExtension.AddSerilogSetup(enviromentName, host.Services); #region 认证程序 //if (!File.Exists($@"C:\ProgramData\.xingcang\config.json")) //{ // Console.WriteLine("当前未注册"); // Log.Logger.Error("当前未注册"); // Console.ReadLine(); // return; //} //else //{ // var json = File.ReadAllText($@"C:\ProgramData\.xingcang\config.json"); // JObject jsonObject = JObject.Parse(json); // var key = jsonObject["key"].ToString(); // var value = jsonObject["value"].ToString(); // var physicalAddressList = NetworkInterface.GetAllNetworkInterfaces().Select(t => t.GetPhysicalAddress().ToString()); // // 判断文件里面的机器码是否是本机的 // if (!physicalAddressList.Contains(key)) // { // Console.WriteLine("机器码和本机不对应"); // Log.Logger.Error("机器码和本机不对应"); // Console.ReadLine(); // return; // } // var secrete = MD5Helper.Md5($"{key}_XINGCANG"); // if (value != secrete) // { // Console.WriteLine("机器码和注册码不匹配"); // Log.Logger.Error("机器码和注册码不匹配"); // Console.ReadLine(); // return; // } //} #endregion //缓存项目的状态 匿名化数据 await InitCache(host); host.Run(); Log.Logger.Warning($"当前环境:{enviromentName}"); } catch (Exception e) { Log.Logger.Error(e.InnerException is null ? e.Message + e.StackTrace : e.InnerException?.Message + e.InnerException?.StackTrace); } } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureKestrel((context, options) => { //设置应用服务器Kestrel请求体最大为1GB // if don't set default value is: 30 MB options.Limits.MaxRequestBodySize = long.MaxValue; options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30); options.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(20); }); //webBuilder.UseSerilog();//在宿主机启动的时候配置serilog,与微软ILogger进行整合 webBuilder.UseStartup(); }).UseSerilog() .UseServiceProviderFactory(new AutofacServiceProviderFactory());//使用Autofac替代本身容器 //ConfigureLogging(logging => //{ // logging.ClearProviders(); // logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); //}) //.UseNLog() // NLog: Setup NLog for Dependency injection; private static async Task InitCache(IHost host) { var _mediator = host.Services.GetService(typeof(IMediator)) as IMediator; await _mediator.Send(new AnonymizeCacheRequest()); await _mediator.Send(new TrialStateCacheRequest()); } } }