huangxiaoqiang
2025-05-19 051aa9a0e7f58af6665fb4526e42cf8060fbaa05
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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<HealthCheckResult> 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);
        }
    }
}