ASP.NET MVC集成SignalR后页面无限加载问题求助
~/signalr/hubs 无限加载问题的几个方向 这种卡在~/signalr/hubs加载的问题确实挺闹心的,我之前排查过好几个类似的情况,给你列几个容易被忽略的排查点,你可以逐一验证:
检查Startup类的配置完整性
确保你的Owin Startup类是public的,并且MapSignalR()的调用位置正确,没有被其他中间件拦截。比如:public class Startup { public void Configuration(IAppBuilder app) { // 先配置SignalR,再添加其他中间件(如MVC路由) app.MapSignalR(); // 其他配置... } }另外要确认项目能正确识别Startup类:要么在
AssemblyInfo.cs里添加[assembly: OwinStartup(typeof(YourNamespace.Startup))],要么在web.config的appSettings里配置<add key="owin:AppStartup" value="YourNamespace.Startup" />。验证SignalR与MVC的版本兼容性
ASP.NET MVC和SignalR的版本必须匹配,比如MVC 5对应SignalR 2.x系列,不要混用跨大版本的包。打开NuGet包管理器,检查Microsoft.AspNet.SignalR.Core、Microsoft.AspNet.SignalR.Mvc等相关包的版本是否一致,有没有版本冲突。排查路由冲突
自定义路由规则可能会拦截signalr/hubs的请求。可以在RouteConfig里先忽略SignalR的路径,避免被默认路由匹配:public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("signalr/{*pathInfo}"); // 先添加这行 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } }确认脚本引用顺序
必须按jQuery → SignalR核心脚本 → ~/signalr/hubs的顺序引用,而且jQuery版本要兼容SignalR(SignalR 2.x推荐jQuery 1.6.4至3.x版本,避免用jQuery 4.x)。示例:<script src="~/Scripts/jquery-3.5.1.min.js"></script> <script src="~/Scripts/jquery.signalR-2.4.2.min.js"></script> <script src="~/signalr/hubs"></script>清理缓存并重启开发环境
用IIS Express开发时,缓存的hubs脚本可能损坏。尝试关闭VS和IIS Express,删除项目根目录下的bin、obj文件夹,然后重新编译运行。如果是部署到IIS,重启应用程序池并清理IIS缓存。开启调试日志定位问题
在客户端添加日志代码,查看加载过程中的错误:$(function() { $.connection.hub.logging = true; $.connection.hub.start() .done(function() { console.log("SignalR连接成功"); }) .fail(function(err) { console.error("SignalR连接失败: ", err); }); });同时查看服务器端的Windows事件日志,或者在Startup里配置SignalR的详细日志,排查是否有Hub类初始化失败(比如依赖注入错误)的情况。
检查自定义Hub类的正确性
确保你的Hub类是public的,并且正确继承自Hub基类:public class YourHub : Hub { // 你的Hub方法 }如果Hub类存在构造函数依赖注入失败、方法定义错误等问题,会导致
~/signalr/hubs生成失败,进而引发页面加载卡住。
内容的提问来源于stack exchange,提问作者Sofiane

