Program.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using Microsoft.OpenApi.Models;
  2. using Microsoft.AspNetCore.HttpOverrides;
  3. using System.Net;
  4. using log4net;
  5. using Coravel;
  6. using AipDatabase.API.Repositories;
  7. using AipDatabase.API.Interfaces;
  8. using AipDatabase.API.Scheduler;
  9. using AipDatabase.API.Middlewares;
  10. using Dapper;
  11. using AipDatabase.API.Infrastructures;
  12. internal class Program
  13. {
  14. private static readonly log4net.ILog _log = LogManager.GetLogger(typeof(Program));
  15. private static void Main(string[] args)
  16. {
  17. try
  18. {
  19. var builder = WebApplication.CreateBuilder(args);
  20. builder.Logging.ClearProviders();
  21. builder.Logging.AddLog4Net();
  22. if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") != null)
  23. {
  24. _log.InfoFormat("Start AIP Database RESTFull API Service... [{0}]", Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));
  25. }
  26. else
  27. {
  28. _log.Info("Start AIP Database RESTFull API Service...");
  29. }
  30. ConfigureSettings(builder.Host, builder.Environment); // 환경설정 파일 설정
  31. builder.Services.AddControllers();
  32. builder.Services.AddSwaggerGen(c => {
  33. c.SwaggerDoc("v1", new OpenApiInfo { Title = "AIP Database RESTFull API Service", Version = "v1" });
  34. });
  35. builder.Services.Configure<ForwardedHeadersOptions>(options =>
  36. {
  37. options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
  38. options.KnownNetworks.Clear();
  39. options.KnownProxies.Clear();
  40. });
  41. int Port = 9872;
  42. if (!int.TryParse(builder.Configuration["Port"], out Port))
  43. {
  44. Port = 9873;
  45. }
  46. builder.WebHost.ConfigureKestrel((context, serverOptions) =>
  47. {
  48. //serverOptions.Limits.MaxRequestBodySize = 100_000_000; // [RequestSizeLimit(100_000_000)] --> Controller 위에 선언, IHttpMaxRequestBodySizeFeature
  49. //serverOptions.Limits.MaxConcurrentConnections = 100;
  50. //serverOptions.Limits.MaxConcurrentUpgradedConnections = 100;
  51. serverOptions.Listen(IPAddress.Any, Port, listenOptions =>
  52. {
  53. //listenOptions.UseHttps("testCert.pfx", "testPassword");
  54. //listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
  55. });
  56. });
  57. builder.Services.AddSingleton<IDatabaseFactory, DatabaseFactory>();
  58. builder.Services.AddScoped<IAipConfigRepository, AipConfigRepository>();
  59. builder.Services.AddScoped<ILinkedSystemRepository, LinkedSystemRepository>();
  60. builder.Services.AddScoped<ILinkedServerRepository, LinkedServerRepository>();
  61. builder.Services.AddScoped<ILinkedApiKeyRepository, LinkedApiKeyRepository>();
  62. //builder.Services.AddScoped<ILinkedDecryptKeyRepository, LinkedDecryptKeyRepository>();
  63. builder.Services.AddScoped<IFileJobLogRepository, FileJobLogRepository>();
  64. // Scheduler Job
  65. //builder.Services.AddScheduler();
  66. //builder.Services.AddTransient<AipDatabaseSchedulerInvocable>();
  67. builder.Services.AddHealthChecks();
  68. builder.Services.AddCors(p => p.AddPolicy("corsapp", builder =>
  69. {
  70. //builder.WithOrigins("*", "http://localhost:3011", "https://localhost:3011", "https://localhost:7261").AllowAnyMethod().AllowAnyHeader();
  71. }));
  72. var app = builder.Build();
  73. //app.Services.UseScheduler(scheduler =>
  74. //{
  75. // scheduler.OnWorker("AipDatabaseSchedulerTask");
  76. // scheduler.Schedule<AipDatabaseSchedulerInvocable>()
  77. // .Hourly();
  78. //});
  79. app.UseHsts();
  80. app.UseHttpsRedirection();
  81. //app.UseStaticFiles();
  82. app.UseRouting();
  83. app.UseCors(builder => builder
  84. .AllowAnyOrigin()
  85. .AllowAnyMethod()
  86. .AllowAnyHeader());
  87. app.UseCors("corsapp");
  88. app.UseAuthentication();
  89. app.UseAuthorization();
  90. app.UseMiddleware<RequestResponseLogging>();
  91. app.UseHealthChecks("/health");
  92. //if (app.Environment.IsDevelopment())
  93. {
  94. app.UseSwagger();
  95. app.UseSwaggerUI(options =>
  96. {
  97. options.SwaggerEndpoint("/swagger/v1/swagger.json", "AIP Database API v1");
  98. options.RoutePrefix = "swagger-ui";
  99. });
  100. }
  101. app.MapControllers();
  102. app.Run();
  103. }
  104. catch (Exception ex) when (ex.GetType().Name is not "StopTheHostException"
  105. && ex.GetType().Name is not "HostAbortedException")
  106. {
  107. _log.FatalFormat("Program Unhandled exception: {ex}");
  108. }
  109. finally
  110. {
  111. _log.Info("Shut down complete");
  112. }
  113. }
  114. private static void ConfigureSettings(IHostBuilder hostBuilder, IHostEnvironment environment)
  115. {
  116. hostBuilder.ConfigureAppConfiguration(config =>
  117. {
  118. config
  119. .SetBasePath(Directory.GetCurrentDirectory())
  120. .AddJsonFile(
  121. path: "appsettings.json",
  122. optional: false,
  123. reloadOnChange: true)
  124. .AddJsonFile(
  125. path: $"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",
  126. optional: true,
  127. reloadOnChange: true)
  128. .AddEnvironmentVariables();
  129. });
  130. }
  131. }