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
相关产品推荐
相关产品推荐

