SignalR对接ExtJS应用异常排查:数据库更新后Grid无数据
排查SignalR触发ExtJS Grid更新异常的关键点
针对你遇到的数据库更新后Grid显示全0的问题,除现有代码外,可从以下维度逐一排查:
消息解析与数据格式校验
- 在ExtJS的
onJobControlCreated/onJobControlUpdated方法中添加调试日志,打印接收的原始消息,确认是否为预期的JSON结构。服务端用JsonConvert.SerializeObject序列化DTO,前端需确保正确反序列化,避免直接将序列化字符串传入Store。 - 检查服务端序列化配置:是否开启了驼峰命名转换(C# PascalCase转JS camelCase),如果DTO字段是
JobId,前端Model的字段应为jobId,否则会出现字段不匹配导致的默认值(0)显示。
- 在ExtJS的
字段映射与类型匹配
- 核对
ServerJobControlSignalDto的字段名、类型,与ExtJS Model定义、Grid列dataIndex是否完全匹配。例如DTO中数字类型字段是否被正确序列化,而非转为字符串;日期类型是否符合前端解析格式。 - 确认
ServerJobControlSignalDto实例化时,jobControl的所有字段都已正确赋值,无遗漏或默认值(0)的情况。
- 核对
SignalR连接与订阅有效性
- 检查浏览器控制台的Network标签,确认WebSocket连接已成功建立,无连接失败或断开的错误日志。
- 在ExtJS的
getHub回调中添加日志,确认jobControlHub实例已获取,且on方法成功订阅了jobControlCreated/jobControlUpdated事件,无代码分支跳过订阅逻辑。
服务端消息发送验证
- 在
SendSignalRMessageAsync方法中添加日志,打印SignalNotification的TargetMethod、Message内容以及CurrentTenant.TenantId,确认消息内容正确且发送到了目标租户。 - 验证
TenantBroadcastAsync方法的实现:是否正确遍历目标租户的所有连接,且消息发送逻辑无异常(比如未处理的异步错误)。
- 在
ExtJS Store更新逻辑
- 检查Store更新代码:新增数据时需使用
store.add(解析后的DTO对象),更新数据需找到对应Model实例后修改字段,避免错误覆盖整个Store数据导致默认值显示。 - 确认Store更新后是否触发了视图刷新:是否调用
store.fireEvent('datachanged'),或Grid已配置自动监听Store变化。
- 检查Store更新代码:新增数据时需使用
配置与依赖差异对比
- 逐行对比公司可用实现的代码细节:
- 服务端:SignalR Startup配置、DTO序列化策略、广播方法参数传递
- 前端:Hub订阅的方法名大小写、数据解析工具、Store绑定逻辑
- 工具类:
Comp.signaling的getHub方法是否存在特殊逻辑(比如连接重试、租户标识传递)
- 逐行对比公司可用实现的代码细节:
跨域与权限验证
- 确认服务端SignalR已配置正确的CORS策略,允许前端域名的跨域请求,避免消息因跨域被拦截。
- 检查SignalR连接时是否携带了正确的租户标识或身份验证信息,确保消息能发送到对应租户的前端连接。
内容的提问来源于stack exchange,提问作者Weedosaurus
相关产品推荐
相关产品推荐

