using Microsoft.Extensions.Diagnostics.HealthChecks; using System.Net.NetworkInformation; using System.Net.WebSockets; public class WebSocketHealthCheck : IHealthCheck { private readonly IWebSocketClientService _webSocketClient; private ClientWebSocket _webSocket = new(); public bool IsConnected => _webSocket?.State == WebSocketState.Open; public WebSocketHealthCheck(IWebSocketClientService webSocketClient) { _webSocketClient = webSocketClient; } public async Task CheckHealthAsync( HealthCheckContext context, CancellationToken cancellationToken = default) { if (IsConnected) return HealthCheckResult.Unhealthy("WebSocket disconnected"); try { // 发送测试PING await _webSocketClient.SendAsync("Ping"); return HealthCheckResult.Healthy("WebSocket connected and responsive"); } catch (Exception ex) { return HealthCheckResult.Unhealthy("WebSocket unresponsive", ex); } } }