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; namespace IRaCIS.Core.API { public class Program { public readonly string environment; public static async Task Main(string[] args) { try { var index = Array.IndexOf(args, "--env"); var environment = index > -1 ? args[index + 1] : "Development"; //Dicom ä¯ÀÀ //ImageManager.SetImplementation(WinFormsImageManager.Instance); var host = CreateHostBuilder(args) .UseEnvironment(environment) //ÃüÁîÐд«Èë»·¾³ .ConfigureAppConfiguration((hostContext, config) => { //Console.WriteLine(hostContext.HostingEnvironment.EnvironmentName); config.AddJsonFile("appsettings.json", false, true) .AddJsonFile($"appsettings.{environment}.json", false, true); }) .Build(); NewId.SetProcessIdProvider(new CurrentProcessIdProvider()); //// Serilog SerilogExtension.AddSerilogSetup(environment, host.Services); //»º´æÏîÄ¿µÄ״̬ ÄäÃû»¯Êý¾Ý await InitCache(host); host.Run(); Log.Logger.Warning($"µ±Ç°»·¾³£º{environment}"); } catch (Exception e) { Log.Logger.Error(e.InnerException is null ? e.Message + e.StackTrace : e.InnerException?.Message + e.InnerException?.StackTrace); } #region Nlog ·ÏÆú //var logger = NLog.Web.NLogBuilder.ConfigureNLog("NLog.config").GetCurrentClassLogger(); //try //{ // var ihostBuilder = CreateHostBuilder(args); // ihostBuilder.UseEnvironment(environment); // ihostBuilder.ConfigureAppConfiguration((hostContext, config) => // { // //Console.WriteLine(hostContext.HostingEnvironment.EnvironmentName); // config.AddJsonFile("appsettings.json", false, true) // .AddJsonFile($"appsettings.{environment}.json", false, true); // }); // var host = ihostBuilder.Build(); // CacheTrialStatus(host); // host.Run(); //} //catch (Exception exception) //{ // //NLog: catch setup errors // logger.Error(exception, "Stopped program because of exception"); //} //finally //{ // // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux) // NLog.LogManager.Shutdown(); //} #endregion } 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<Startup>(); }).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()); } } }