using LocalhostMES.Core; using Microsoft.Owin.Hosting; using System; using System.Threading; using System.Threading.Tasks; namespace LocalhostMES.Api.Hosting { /// /// 自托管 Web API(OWIN + Web API 2),供产线/上位机调用。 /// public class WebApiService : IDisposable { private IDisposable _webApp; private readonly CancellationTokenSource _cts = new CancellationTokenSource(); private StartOptions _startOptions; private string _baseUrl = "192.168.1.26:8081"; public void Init(int port = 8081) { _baseUrl = $"http://192.168.1.26:{port}"; _startOptions = new StartOptions { Urls = { $"http://192.168.1.26:{port}", $"http://10.157.15.51:{port}" } }; } public Task StartAsync() { try { _webApp = WebApp.Start(_startOptions, app => new OwinWebApiStartup().Configuration(app)); InitializeTestData(); LogHelper.WriteLogInfo($"Web API服务已启动: {_baseUrl}"); Console.WriteLine($"Web API服务已启动: {_baseUrl}"); } catch (Exception ex) { Console.WriteLine($"启动Web API服务失败: {ex.Message}"); LogHelper.WriteLogInfo($"启动Web API服务失败: {ex.Message}"); throw; } return Task.CompletedTask; } private static void InitializeTestData() { try { Console.WriteLine("测试数据初始化完成"); } catch (Exception ex) { Console.WriteLine($"初始化测试数据失败: {ex.Message}"); } } public Task StopAsync() { _webApp?.Dispose(); _webApp = null; Console.WriteLine("Web API服务已停止"); return Task.CompletedTask; } public void Dispose() { _cts?.Cancel(); _cts?.Dispose(); _webApp?.Dispose(); GC.SuppressFinalize(this); } public bool IsRunning => _webApp != null; public string BaseUrl => _baseUrl; } }