You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测并处理StrawberryShake Subscription连接失败问题?

问题:StrawberryShake GraphQL客户端订阅连接状态检测方法缺失

本地运行两个ASP.NET应用:一个是状态正常的HotChocolate GraphQL服务端,另一个通过StrawberryShake GraphQL客户端访问订阅功能。但StrawberryShake关于订阅的文档极少,找不到检测连接错误的方法,尝试的代码中相关逻辑均未触发:

try
{
    // client是StrawberryShake自动生成的客户端。
    session = client.KeyRequest
        .Watch(new ServerInfoInput
        {
            Name = "test",
            MachineIdentifier = "machine",
        }).Subscribe(result =>
        {
            // 此处断点从未触发。
            var data = result.Data;
        }, () =>
        {
            // 此输出语句从未执行。
            Console.WriteLine("Complete");
        });
}
catch (Exception e)
{
    // 从未抛出异常。
    Console.WriteLine(e.ToString());
}

请问是否有办法判断与服务端的连接是否成功?


解决方法

1. 监听WebSocket连接事件

StrawberryShake的订阅基于WebSocket,可通过注入IWebSocketConnection监听连接的打开、关闭和错误事件:

// 在客户端类中注入IWebSocketConnection
private readonly IWebSocketConnection _webSocketConnection;

public YourClient(IWebSocketConnection webSocketConnection)
{
    _webSocketConnection = webSocketConnection;
    // 绑定连接状态事件
    _webSocketConnection.Opened += OnConnectionOpened;
    _webSocketConnection.Closed += OnConnectionClosed;
    _webSocketConnection.Error += OnConnectionError;
}

private void OnConnectionOpened(object sender, EventArgs e)
{
    Console.WriteLine("WebSocket连接已成功建立");
}

private void OnConnectionClosed(object sender, EventArgs e)
{
    Console.WriteLine("WebSocket连接已关闭");
}

private void OnConnectionError(object sender, WebSocketErrorEventArgs e)
{
    Console.WriteLine($"WebSocket连接错误: {e.Message}");
}

2. 完善订阅的异常与错误处理

原代码的Subscribe方法只传入了两个参数,漏掉了异常处理分支。补充第三个参数处理订阅过程中的异常,同时检查结果中的错误信息:

session = client.KeyRequest
    .Watch(new ServerInfoInput
    {
        Name = "test",
        MachineIdentifier = "machine",
    }).Subscribe(
        result =>
        {
            // 检查结果中的业务错误
            if (result.Errors?.Any() == true)
            {
                foreach (var error in result.Errors)
                {
                    Console.WriteLine($"订阅返回错误: {error.Message}");
                }
                return;
            }
            var data = result.Data;
        },
        () => Console.WriteLine("订阅已完成"),
        ex => Console.WriteLine($"订阅过程发生异常: {ex.ToString()}")
    );

3. 启用详细日志排查

在客户端项目的appsettings.json中开启StrawberryShake的调试日志,查看连接过程中的细节:

{
    "Logging": {
        "LogLevel": {
            "StrawberryShake": "Debug",
            "StrawberryShake.Transport.WebSockets": "Debug"
        }
    }
}

内容的提问来源于stack exchange,提问作者Icode4food

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:25:13