using Hh.Mes.Common.log; using log4net; using log4net.Config; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using System; using System.IO; using System.Linq; using Hh.Mes.Common.config; using System.Net; using System.Security.Cryptography.X509Certificates; using Hh.Mes.API.Common; using Hh.Mes.Common; namespace Hh.Mes.Api { /// <summary> /// 启动类 http or https监听 根据实际情况注释 /// 注意:没有特殊情况请不要随便修改 lsw /// 路径 https://www.cnblogs.com/cang12138/p/5845122.html /// </summary> public class Program { #region 全局变量 public static readonly string tokens = "Token"; public static int httpsPort { get; set; } public static int httpPort { get; set; } /// <summary> /// 证书路径和密码 /// </summary> public static string cerPath { get; set; } public static string cerPwd { get; set; } /// <summary> /// 运用程序key /// </summary> public static string AppKey { get; set; } public static string AppSecret { get; set; } public static readonly string service = "Hh.Mes.Service"; public static readonly string serviceSuffix = "Service"; #endregion public static void Main(string[] args) { ExceptionsHelp.Instance.ExecuteVoidFunc(() => { #region Log4Net Log4NetHelper.Instance.Repository = LogManager.CreateRepository("NETCoreRepository"); XmlConfigurator.Configure(Log4NetHelper.Instance.Repository, new FileInfo(Path.GetDirectoryName(typeof(Program).Assembly.Location) + "/Config/log4net.config")); #endregion #region 本地封装日接口日志 Logging.GetInstance.InitWriteInterLog(); #endregion InitSysValue(); #region 端口是否占用 if (httpsPort == 0 && httpPort == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("HttpsPort、HttpsPort 端口配置都是0"); Console.ReadKey(); return; } if (httpsPort != 0) { var isHttpsPort = ComputerHelp.PortInUse(httpsPort); if (isHttpsPort) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("HttpsPort 端口已被占用:" + httpsPort); Console.ReadKey(); return; } } if (httpPort != 0) { var isHttpPortk = ComputerHelp.PortInUse(httpPort); if (isHttpPortk) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("HttpPort 端口已被占用:" + httpPort); Console.ReadKey(); return; } } #endregion CreateHostBuilder(args).Build().Run(); }); } public static IHostBuilder CreateHostBuilder(string[] args) { X509Certificate2 certificate = null; if (httpsPort != 0) certificate = InitCer(); Console.ResetColor(); return Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder => { webBuilder.UseKestrel(options => { //跨域 options.AddServerHeader = false; //https://www.cnblogs.com/lxhbky/p/11969478.html //https://www.cnblogs.com/wucy/p/14824585.html //设置Body大小限制256MB options.Limits.MaxRequestBodySize = 268435456; //https 根据实际情况开启监听 //options.Listen(IPAddress.Any, httpsPort, listenOptions => //{ // listenOptions.UseHttps(certificate); //}); //http 根据实际情况 开启监听 options.Listen(IPAddress.Any, httpPort); }); webBuilder.UseStartup<Startup>(); Console.WriteLine(); Console.WriteLine("API接口程序 Init Started successfully!"); Console.WriteLine(); }); } private static void InitSysValue() { Console.Title = "IOT API接口 网关服务"; #region 获取配置信息 httpPort = ConfigRead.GetInstance.GetAppsetConnection().HttpPort; httpsPort = ConfigRead.GetInstance.GetAppsetConnection().HttpsPort; //添加 json 文件路径 var builder = new ConfigurationBuilder().SetBasePath(AppDomain.CurrentDomain.BaseDirectory).AddJsonFile("appsettings.json"); //创建配置根对象 var configurationRoot = builder.Build(); //取 family 部分下的 mother 部分下的 name 部分 var appCustomSettings = configurationRoot.GetSection("AppCustomSettings"); AppKey = appCustomSettings.GetSection("AppKey").Value; AppSecret = appCustomSettings.GetSection("AppSecret").Value; #endregion Console.WriteLine("初始化值InitSysValue 成功!"); } /// <summary> /// 证书 /// </summary> private static X509Certificate2 InitCer() { #region 证书 var config = new ConfigurationBuilder().SetBasePath(AppContext.BaseDirectory) .AddEnvironmentVariables() .AddJsonFile("certificate.json", optional: true, reloadOnChange: true) .AddJsonFile($"certificate.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true, reloadOnChange: true) .Build(); //Log4NetHelper.Instance.Info("CreateHostBuilder方: Certificate path:" + AppContext.BaseDirectory); var certificateSettings = config.GetSection("certificateSettings"); string certificateFileName = certificateSettings.GetValue<string>("filename"); cerPwd = certificateSettings.GetValue<string>("password"); cerPath = Path.Combine(AppContext.BaseDirectory, certificateFileName); if (!File.Exists(cerPath)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(); Console.WriteLine("证书文件不存在!路径:" + cerPath); Console.ReadKey(); } var certificate = new X509Certificate2(certificateFileName, cerPwd); Console.WriteLine("证书Cer,初始化读取配置成功!"); return certificate; #endregion } } }