using Microsoft.AspNetCore.Hosting;
using System.Runtime.InteropServices;
using ServiceCenter.Extensions;
using ServiceCenter.Redis;
using ServiceCenter.WebApi;
using MessagePack;
namespace WCS.Service
{
public class Program
{
public static void Main(string[] args)
{
#region 接入Redis
RedisHub.CreateContext(AppSettings.Config.GetConnectionString("Redis"), "default", true);
#endregion 接入Redis
//互斥锁检测
var mutexName = RedisHub.Default.Check("Mutex") ?? throw new Exception("请在Redis中配置互斥量值");
using var mt = new Mutex(true, mutexName);
if (mt.WaitOne())
{
CreateHostBuilder(args).Build().Run(); mt.ReleaseMutex();
}
else
{
Console.WriteLine("请勿重复运行");
//InfoLog.INFO_INIT("请勿重复运行");
Task.Delay(2000).Wait();
}
}
///
/// 创建一个主机构建器
///
///
///
public static IHostBuilder CreateHostBuilder(string[] args)
{
//是否是win平台
var isWin = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
Console.WriteLine($"win:{isWin}");
if (isWin)
{
var useUrls = RedisHub.Default.Check("UseUrls") ?? throw new Exception("请在Redis中配置网络访问端口");
//"http://*:8080"
return Host.CreateDefaultBuilder(args)
.UseWindowsService()//win
.ConfigureWebHostDefaults(web => //网络访问配置
{
web.UseUrls(useUrls); //设备访问端口
web.UseStartup(); //调用启动服务
})
.ConfigureServices((_, services) =>
{
services.AddHostedService();
services.AddHttpClient();
});
}
return Host.CreateDefaultBuilder(args)
.UseSystemd()//linux
.ConfigureServices((_, services) =>
{
services.AddHostedService();
});
}
}
}