Program.cs 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using IESHybridCloud.Services;
  2. using MathNet.Numerics;
  3. using Microsoft.Extensions.DependencyInjection.Extensions;
  4. using Serilog;
  5. using System.Configuration;
  6. using System.Text.Json;
  7. using TEAMModelOS.SDK;
  8. using TEAMModelOS.SDK.DI;
  9. using TEAMModelOS.SDK.DI.Device;
  10. namespace IESHybridCloud
  11. {
  12. public class Program
  13. {
  14. public static void Main(string[] args)
  15. {
  16. var builder = WebApplication.CreateBuilder(args);
  17. //防止编译后的appsettings.json 文件内容,在重新部署的时候,因为不同的环境导致被覆盖的问题,
  18. //所以在正式环境中指定appsettings-prod.json一个本地开发环境不存在的文件,以达到不会被覆盖的问题,
  19. //即使在生产环境中未配置appsettings-prod.json 也不影响启动,因为会按照appsettings.json的配置启动
  20. #if !DEBUG
  21. builder.Host.ConfigureAppConfiguration((context, config) => {
  22. config.SetBasePath(Directory.GetCurrentDirectory());
  23. config.AddJsonFile("appsettings-prod.json", optional: true, reloadOnChange: true);
  24. });
  25. #endif
  26. Log.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.Console(outputTemplate: "{Timestamp:HH:mm:ss.fff zzz} [{Level:u3}] ({ThreadId}) {Message}{NewLine}{Exception}")
  27. .WriteTo.File("logs/log-.log", rollingInterval: RollingInterval.Day).CreateLogger();
  28. builder.Host.UseSerilog();
  29. // Add services to the container.
  30. builder.Services.AddControllers();
  31. builder.Services.AddHttpClient();
  32. string? StorageConnectionString = builder.Configuration.GetValue<string>("Azure:Storage:ConnectionString");
  33. string? RedisConnectionString = builder.Configuration.GetValue<string>("Azure:Redis:ConnectionString");
  34. //Storage
  35. builder.Services.AddAzureStorage(StorageConnectionString, "Default");
  36. //Redis
  37. builder.Services.AddAzureRedis(RedisConnectionString, "Default");
  38. builder.Services.AddSignalR();
  39. builder.Services.AddHttpContextAccessor();
  40. builder.Services.AddHttpClient<DingDing>();
  41. string path = $"{builder.Environment.ContentRootPath}/JsonFiles";
  42. builder.Services.TryAddSingleton(new Region2LongitudeLatitudeTranslator(path));
  43. builder.Services.AddIPSearcher(path);
  44. builder.Services.AddSingleton<CoreDevice>();
  45. builder.Services.AddCors(options =>
  46. {
  47. options.AddDefaultPolicy(
  48. builder =>
  49. {
  50. builder.AllowAnyOrigin()
  51. .AllowAnyHeader()
  52. .AllowAnyMethod();
  53. });
  54. });
  55. builder.Services.AddControllersWithViews();
  56. builder.Services.AddSingleton<BackgroundWorkerQueue>();
  57. builder.Services.AddHostedService<SignalRIESHybridClientHub>();
  58. builder.Services.AddAzureSignalR(builder.Configuration.GetValue<string>("Azure:SignalR:ConnectionString"));
  59. ////MQTT 服务端API 发送消息到MQTT客户端 https://www.cnblogs.com/weskynet/p/16441219.html
  60. //#region MQTT配置
  61. //builder.Services.AddSingleton<MQTTEvents>();
  62. //builder.Services.AddSingleton(new JsonSerializerOptions(JsonSerializerDefaults.Web));
  63. //builder.Services.AddHostedMqttServerWithServices(x =>
  64. //{
  65. // x.WithDefaultEndpoint()
  66. // .WithConnectionBacklog(1000)
  67. // .WithPersistentSessions(true).WithKeepAlive()
  68. // .WithDefaultCommunicationTimeout(TimeSpan.FromMilliseconds(30));
  69. //}).AddMqttConnectionHandler().AddConnections().AddMqttControllers();
  70. //#endregion
  71. var app = builder.Build();
  72. // Configure the HTTP request pipeline.
  73. app.UseHttpsRedirection();
  74. app.UseAuthorization();
  75. app.MapControllers();
  76. app.Run();
  77. }
  78. }
  79. }