如何检测并处理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
相关产品推荐
相关产品推荐

