MVC3项目本地运行SignalR无法加载Hubs问题求助
我之前维护MVC3项目时也碰到过一模一样的SignalR报错,给你几个实际排查的方向,应该能快速解决:
检查Global.asax中的SignalR路由注册
MVC3没有Startup.cs,SignalR的路由是在Application_Start方法里配置的。你需要确保已经添加了RouteTable.Routes.MapHubs();,而且这行代码要放在MVC路由注册(RouteConfig.RegisterRoutes)之前,不然MVC的路由规则会优先拦截请求,导致signalr/hubs无法正确返回脚本。修正本地调试的脚本路径
服务器上可能是根域名部署,但本地调试时项目通常会有虚拟目录(比如http://localhost:xxxx/MyProject)。如果直接用<script src='/signalr/js'></script>这种绝对路径,本地会找不到资源。建议用MVC的Url辅助方法生成路径:<script src='@Url.Content("~/signalr/hubs")'></script>这样不管是本地还是服务器环境,路径都会自动解析正确。
确保SignalR版本与服务器一致
如果本地NuGet的SignalR版本和服务器上的不一致,可能会导致生成的hubs脚本不兼容。可以先卸载本地的SignalR包,再重新安装和服务器同版本的:Uninstall-Package Microsoft.AspNet.SignalR -Force Install-Package Microsoft.AspNet.SignalR -Version x.x.x # 替换成服务器的版本号检查脚本引用顺序
SignalR依赖jQuery,所以必须保证脚本加载顺序正确:<script src="~/Scripts/jquery-x.x.x.min.js"></script> <script src="~/Scripts/jquery.signalR-x.x.x.min.js"></script> <script src="~/signalr/hubs"></script>如果先加载hubs再加载jQuery或SignalR核心,必然会触发加载失败的错误。
清理本地编译缓存
有时候本地的bin/obj文件夹里的旧文件会导致冲突。可以删除项目根目录下的bin和obj文件夹,然后重新编译项目,再启动调试。
内容的提问来源于stack exchange,提问作者moris62

