EI-Image-Viewer-Api/IRaCIS.Core.API/Program.cs

278 lines
9.0 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;
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 void Main(string[] args)
{
#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;
}
#region 数据库连接写入配置文件
//var currentDicectory = AppContext.BaseDirectory;
//var rootPath = (Directory.GetParent(currentDicectory.TrimEnd('\\'))).FullName;
//var configPath = Path.Combine(rootPath, "resources/config.json");
//var initConfigJson = File.ReadAllText(configPath);
//var innitJsonObj = JObject.Parse(initConfigJson);
var dbServerName = jsonObject["server"].ToString();
var dbLoginUser = jsonObject["user"].ToString();
var dbPwd = jsonObject["password"].ToString();
var appsettingsJson = File.ReadAllText("appsettings.CertificateApply.json");
// 解析 JSON 字符串
var jObject = JObject.Parse(appsettingsJson);
// 获取 UpdateConfig 属性所在的节点
var updateConfigNode = jObject["ConnectionStrings"];
var connectionString = $"Server={dbServerName};Database=IRaCIS;User ID={dbLoginUser};Password={dbPwd}1;TrustServerCertificate=true";
updateConfigNode["RemoteNew"] = connectionString;
try
{
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
File.WriteAllText("appsettings.CertificateApply.json", jObject.ToString());
}
}
catch (SqlException)
{
Console.WriteLine("连接字符串错误");
}
#endregion
}
#endregion
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);
//缓存项目的状态 匿名化数据
//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);
}
#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());
}
}
}