如何查看Blazor中Signal R请求详情?排查消息过大问题
定位SignalR超大消息来源的实用方法
客户端拦截 outgoing 消息
在客户端发送消息前加入日志逻辑,提前捕获超大消息:// JavaScript客户端示例:发送前记录消息大小与内容 const originalInvoke = connection.invoke; connection.invoke = function(methodName, ...args) { const message = args[0]; // 按需调整参数位置,匹配你的消息结构 const messageSize = new TextEncoder().encode(JSON.stringify(message)).length; console.log(`Outgoing message size: ${messageSize}B`, message); return originalInvoke.call(connection, methodName, ...args); };每条待发送的消息都会在控制台打印大小和内容,可快速定位超限条目。
服务端拦截 incoming 消息
在ASP.NET Core中添加前置中间件,捕获Hub的请求体:// 需在app.MapHub<YourHub>("/hub")之前注册该中间件 app.Use(async (context, next) => { if (context.Request.Path.StartsWithSegments("/your-hub-path")) // 替换为你的Hub路径 { context.Request.EnableBuffering(); var body = await new StreamReader(context.Request.Body).ReadToEndAsync(); var size = System.Text.Encoding.UTF8.GetByteCount(body); if (size > 36000) { Console.WriteLine($"Large incoming message ({size}B): {body}"); } context.Request.Body.Position = 0; // 重置流位置,确保后续处理能正常读取 } await next(); });该中间件会读取所有发往Hub的请求内容,超过阈值时自动记录详细信息。
启用SignalR详细日志
修改appsettings.json开启Debug级别的SignalR日志:{ "Logging": { "LogLevel": { "Microsoft.AspNetCore.SignalR": "Debug", "Microsoft.AspNetCore.Http.Connections": "Debug" } } }日志中会包含
Received message和Sending message条目,其中带有消息的具体内容(或截断内容),结合大小信息即可定位超限消息。抓包工具分析WebSocket流量
用Wireshark或Fiddler抓取WebSocket通信:- 筛选WebSocket协议的流量,查看每个帧的Payload长度
- 找到超过36000B的帧,解码内容(JSON格式可直接查看,MessagePack需用对应工具解析)
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

