ASP.NET MVC中SignalR/hubs持续下载致网站无法加载问题求助
我之前在做ASP.NET MVC + SignalR项目时也碰到过一模一样的情况,折腾了好一会儿才解决,给你几个具体的排查和解决方向:
检查jQuery与SignalR版本兼容性
SignalR 2.2.3对jQuery版本有严格要求:它支持jQuery 1.6.4及以上,但完全不兼容jQuery 3.x版本。你需要确保页面中引用的jQuery是2.x或1.10.x这类符合要求的版本,而且一定要在jquery.signalR-2.2.3.js之前加载jQuery(你的代码里顺序是对的,但再确认下实际引用的jQuery版本)。排查路由冲突问题
有时候MVC的自定义路由会拦截SignalR的请求,导致脚本加载异常。你可以:- 确保
Startup.Configuration中的app.MapSignalR()调用,放在MVC路由注册(RouteConfig.RegisterRoutes)之前; - 检查
RouteConfig里有没有类似signalr/{*pathInfo}的路由规则,如果有,调整规则避免匹配SignalR的路径。
- 确保
检查自动生成的代理脚本语法
虽然你能在新标签页打开signalr/hubs,但生成的代理脚本可能存在隐性语法错误(比如模型序列化失败导致的代码异常)。打开signalr/hubs的内容,仔细检查:- 有没有未闭合的括号、引号;
- 你的
Notification类是否存在循环引用、无法被JSON序列化的属性(比如非公共属性、复杂嵌套类型)。
可以先简化Notification类,只保留简单的字符串/数值属性,测试是否还会出现加载卡住的问题。
查看浏览器开发者工具的详细错误
按F12打开浏览器开发者工具,切换到「网络」标签重新加载页面:- 查看
signalr/hubs请求的状态码(正常应该是200); - 切换到「控制台」标签,检查有没有JS报错或未捕获的异常。有时候“持续下载”的表象下,其实是脚本加载后执行出错导致页面阻塞。
- 查看
确认自定义脚本的执行时机
你的signalRPlatform.js和Platform.js中如果有SignalR初始化代码,一定要确保它们在DOM完全加载后执行,比如用jQuery的DOM就绪事件包裹:$(function() { // 这里写SignalR连接初始化代码 var hub = $.connection.notifier; // ...其他逻辑 });避免脚本刚加载就执行SignalR相关逻辑,导致未准备好的资源阻塞页面加载。
显式指定SignalR路由路径
尝试在Startup中显式指定SignalR的路由路径,确保和视图中的引用一致:public void Configuration(IAppBuilder app) { app.MapSignalR("/signalr", new HubConfiguration()); }同时视图中引用改为:
<script src="~/signalr/hubs"></script>
内容的提问来源于stack exchange,提问作者Sofiane

