144 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C#
		
	
	
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);
 | 
						|
 | 
						|
                //Log.Logger.Error("缓存项目状态完毕");
 | 
						|
 | 
						|
                host.Run();
 | 
						|
            }
 | 
						|
            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());
 | 
						|
        }     
 | 
						|
 | 
						|
    }
 | 
						|
}
 |