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

为什么Azure SignalR服务未向我的KendoUI Grid返回任何数据?

问题解决步骤

1. 核心配置错误:Hub映射位置和写法错误

ASP.NET Core 3.0+ 版本中,Azure SignalR 的 Hub 映射必须放在 UseEndpoints 委托内部,你当前单独调用 app.UseAzureSignalR 且放在 UseEndpoints 之后的写法已经废弃,会导致 Hub 路由无法正常注册。

修正方案:

删除 Configure 方法中单独的 app.UseAzureSignalR 代码块,将 Hub 映射移到 UseEndpoints 中:

app.UseEndpoints(endpoints =>
{
    endpoints.MapHealthChecks("/healthcheck");
    endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
    // 所有Hub映射写在这里
    endpoints.MapHub<RequirementHub>("/requirementHub");
    endpoints.MapHub<PositionHub>("/positionHub");
    endpoints.MapHub<FixtureHub>("/fixtureHub");
    endpoints.MapHub<NewswireHub>("/newswireHub");
});

2. Hub异步方法未加await

你在 OnConnectedAsync、OnDisconnectedAsync 中调用的分组操作是异步方法,没有加await会导致操作未完成就提前返回,用户无法被正确加入分组,后续数据推送无法触达。

修正方案:

public override async Task OnConnectedAsync()
{
    await Groups.AddToGroupAsync(Context.ConnectionId, GetGroupName());
    await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception e)
{
    await Groups.RemoveFromGroupAsync(Context.ConnectionId, GetGroupName());
    await base.OnDisconnectedAsync(e);
}

3. 前端选择器拼写错误

HTML 中 Grid 容器的 ID 是 requirement-grid(中划线),JS 中选择器写的是 $('#requirement_grid')(下划线),会导致 Grid 无法正常绑定到对应容器。

修正方案:

将 JS 选择器改为 $('#requirement-grid'),其余三个 Grid 同步检查 ID 拼写。

4. Hub Read 方法返回格式不符合 Kendo 要求

Kendo SignalR 数据源默认要求返回带Data(数据列表)和Total(总条数)的结构,你直接返回IEnumerable且没有处理分页、排序参数,会导致 Grid 无法识别返回的数据。

修正方案:

引入 Kendo 的DataSourceRequest相关命名空间,修改 Read 方法:

using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;

public object Read([DataSourceRequest] DataSourceRequest request)
{
    return _requirement.GetAll().ToDataSourceResult(request);
}

5. 分组策略不合理

你使用RemoteIpAddress作为分组名称,部署在 Azure 后,服务端拿到的是 Azure 反向代理的内网IP,不是用户真实IP,会导致分组逻辑混乱。

修正方案:

改用登录用户ID作为分组依据,更稳定可靠:

public string GetGroupName()
{
    return Context.UserIdentifier;
}

6. 额外检查项

  • 确认 Azure SignalR 服务的服务模式设置为Default,不要使用Serverless模式
  • 确认你的账号处于登录状态,全局配置的身份验证过滤器不会拦截 SignalR 请求
  • 打开浏览器控制台的网络标签,检查 SignalR 连接建立后的read调用是否有报错返回

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:06:05