Program.cs 4.42 KB
using HHECS.Dal;
using HHECS.WebCommon.Config;
using HHECS.WebCommon.Port;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using System;
using System.IO;
using Autofac.Extensions.DependencyInjection;
using log4net;
using log4net.Config;
using HHECS.Infrastructure.LogHelper;
using System.Net;

namespace HHECS.Web
{
    public class Program
    {
        #region 全局变量
        public static int httpPort { get; set; }
        public static int httpsPort { get; set; }
        #endregion

        public static void Main(string[] args)
        {  
            #region Log4Net (先初始化日志,不然有错误都无法记录)
            InitLog();
            #endregion

            InitSysValue();

            #region 端口是否占用
            var isHttpOk = ComputerHelp.PortInUse(httpPort);
            if (isHttpOk)
            {
                Console.WriteLine("端口httpPort已被占用:" + httpPort);
                return;
            }
            var isHttpsOk = ComputerHelp.PortInUse(httpsPort);
            if (isHttpsOk)
            {
                Console.WriteLine("端口httpsPort已被占用:" + httpsPort);
                return;
            }
            #endregion

            CreateHostBuilder(args).Build().Run();

        }


        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            return Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>
            {
                //部署时,取消注释;调试时注释掉
                //webBuilder.UseUrls("http://*:9005");

                webBuilder.ConfigureKestrel(serverOptions =>
                {
                    serverOptions.ConfigureHttpsDefaults(httpsOptions =>
                    {
                        // 强制Kestrel使用TLS1.2+(需与证书兼容)
                        httpsOptions.SslProtocols = System.Security.Authentication.SslProtocols.Tls12
                                                  | System.Security.Authentication.SslProtocols.Tls13;
                    });
                });
                webBuilder.UseStartup<Startup>();
            }).UseServiceProviderFactory(new AutofacServiceProviderFactory());
        }

        private static void InitLog()
        {
            var path = Path.GetDirectoryName(typeof(Program).Assembly.Location) + "/Config/log4net.config";
            Log4NetHelper.Instance.Repository = LogManager.CreateRepository("NETCoreRepository");
            XmlConfigurator.Configure(Log4NetHelper.Instance.Repository, new FileInfo(path));
            Console.WriteLine("Log4Net 初始化成功");
        }


        private static void InitSysValue()
        {
            Console.Title = "设备台光WEB网关服务";

            #region 获取配置信息        
            //添加 json 文件路径
            var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");
            //创建配置根对象
            var configurationRoot = builder.Build();
            //取 family 部分下的 mother 部分下的 name 部分
            var appCustomSettings = configurationRoot.GetSection("AppCustomSettings");

            DALHelper.Constr = configurationRoot.GetSection("ConnectionStrings").GetSection("BaseDBContext").Value;

            httpPort = int.Parse(appCustomSettings.GetSection("WebPort").Value);
            httpsPort = httpPort + 1000;
            #endregion
            //string s = appCustomSettings.GetSection("LoginTitle").Value;
            ConfigRead.GetInstance.GetAppsetConnection().LoginTitle = appCustomSettings.GetSection("LoginTitle").Value;
            ConfigRead.GetInstance.GetAppsetConnection().EmailUser = appCustomSettings.GetSection("EmailUser").Value;
            ConfigRead.GetInstance.GetAppsetConnection().EmailPassword = appCustomSettings.GetSection("EmailPassword").Value;
            ConfigRead.GetInstance.GetAppsetConnection().EmailServer = appCustomSettings.GetSection("EmailServer").Value;
            ConfigRead.GetInstance.GetAppsetConnection().FileUrl = appCustomSettings.GetSection("FileUrl").Value;
            ConfigRead.GetInstance.GetAppsetConnection().SendEmailTime = appCustomSettings.GetSection("SendEmailTime").Value;
            //内存缓存设置 路径和密码 定时器启动使用
            ConfigRead.GetInstance.GetAppsetConnection().HttpWebPort = httpPort;
            ConfigRead.GetInstance.GetAppsetConnection().HttpsWebPort = httpsPort;
            Console.WriteLine("InitSysValue 初始化成功");
        }
    }
}