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

SignalR中Clients.All.function_name()调用无效问题求助

解决SignalR Clients.All调用无效的问题

我帮你排查了代码里的几个关键问题,修正后应该就能正常工作了:

1. 核心问题:客户端方法名称不匹配

你在Hub类里定义的客户端调用是Clients.All.syenile(),但通过IHubContext触发时却写成了yenileContext.Clients.All.yenile()——方法名少了开头的s!SignalR对方法名称是严格匹配的,这直接导致客户端收不到消息。

修正后的IHubContext调用代码:

yenileContext.Clients.All.syenile();

2. JavaScript事件注册写法错误

你的JS代码里给syenile事件赋值的方式有误:

sayfayenile.client.syenile = $(function () { ... });

这里的$(function(){})是jQuery的DOM就绪回调,你把这个回调的返回值赋值给了事件处理函数,而非直接定义触发时要执行的逻辑。正确写法是直接赋值一个函数:

修正后的JavaScript代码:

<script>
var sayfayenile = $.connection.yenile;

// 直接定义syenile事件的处理逻辑
sayfayenile.client.syenile = function () {
    $.ajax({
        type: "GET",
        url: '/hasta/',
        data: {},
        success: function (data) {
            $("#con").html($(data).find("#con").html());
        }
    });
};

$.connection.hub.start().done(function () {
    console.log("connected");
});
</script>

3. 可选优化:Hub类命名规范

虽然不影响功能,但遵循C#编码规范(帕斯卡命名法)可以避免潜在冲突,建议把Hub类名改成首字母大写:

public class Yenile : Hub 
{ 
    public void sayfaYenile() 
    { 
        Clients.All.syenile(); 
    } 
}

对应的IHubContext也要同步修改:

public static IHubContext yenileContext = GlobalHost.ConnectionManager.GetHubContext<Yenile>();

(SignalR会自动把大写的Hub类名转成驼峰式,所以JS里的$.connection.yenile不需要改动)

额外检查项

  • 确保页面脚本引入顺序正确:先引入jQuery,再引入~/signalr/hubs动态代理脚本,最后是你的自定义JS代码。
  • 打开浏览器开发者工具(F12)的Console标签,查看是否有连接失败、脚本加载错误等提示。
  • 确认Startup类的app.MapSignalR()配置正确,SignalR路由已正常注册。

按照以上步骤修正后,你的SignalR调用应该就能正常触发客户端更新了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:16:45