更新到MVC5后找不到/ signalr / hubs 404

SignalR正在工作,而项目是ASP.NET MVC3。 现在我把它升级到MVC5(不是那么容易做,我必须告诉你)。

然后我注意到signalR没有工作。 我按照这本书,将SignalR重新安装到版本2.1.0,安装了OWIN(必须为v2 +)并为项目添加了启动类。

这是我的startup.cs类,它位于项目根文件夹中:

[assembly: OwinStartup(typeof(SISTEM.Startup))] namespace SISTEM { public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } } } 

我觉得这里没问题,但也许我错过了一些东西……

现在这里是来自集线器的片段:

 namespace SISTEM { public class PostingHub : Hub { public void Test(string hello) { Clients.All.hello(hello); } } } 

然后我在视图中引用生成的代理:

   

我在fiddler中检查它,我可以看到/ signalr / hubs请求正在生成未找到的HTTP 404。

现在,我不是懒惰,我尝试了几件事:

  • 修补无扩展URL的IIS – 因为我使用的是win8,所以不应该成为问题
  • 在RegisterRoutes(RouteTable.Routes)之前调用RouteTable.Routes.MapHubs() – VS将不允许它。 给我一个错误,说它已经过时,使用OWIN。
  • 下载的工具用于生成JavaScript代理(SignarR Utils),所以我可以稍后手动引用它们。 试图生成,没有错误,但生成的js是空的。 试了好几次。 这对我来说最有趣。 也许由于某种原因无法生成代理。

任何帮助,将不胜感激。

更新:来自/ signalr / hubs的响应

    The resource cannot be found.    

Server Error in '/' Application.

The resource cannot be found.

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly.

Requested URL: /signalr/hubs


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34212

 [HttpException]: The controller for path '/signalr/hubs' was not found or does not implement IController. at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

您需要在项目中安装Microsoft.Owin.Host.SystemWeb包

validation此链接

如果未安装软件包,请从软件包管理器控制台(PMC)安装以下软件包:

安装包Microsoft.Owin.Host.SystemWeb

UPDATE

它纯粹说,它无法检测你的启动类,这里有更多的发现。

  • 我相信这个密钥在配置文件中不存在
  • 您的应用程序可能缓存在临时文件夹中,尝试删除应用程序的临时文件。(转到运行>%TEMP%> CTRL + A>删除)

这肯定会有效,如果它没有尝试在示例项目中创建signalR。

像米洛斯说的那样,清除临时文件夹可能会解决问题。 我已经创建了一个脚本来执行此操作,我将其称为powerreset.cmd,它应该以管理员身份运行:

 @echo off @iisreset /stop @robocopy e:\empty "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files" /PURGE @robocopy e:\empty "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files" /PURGE @iisreset /start 

e:\ empty文件夹(将作为源文件,并使用带有robocopy的清除)应清除临时文件。

SignalR js版本应该是相同的, 但可以是不同的 。 作为副作用,您将在浏览器控制台中发现该错误。

检查Scripts文件夹中SignalR库的版本以及视图中引用的版本。

  • 〜/ Scripts / jquery.signalR-2.1.0.min.js(SignalR教程);
  • jquery.signalR-2.2.1.min.js安装在scripts文件夹中(nuget安装:install-package Microsoft.AspNet.SignalR)。

有时最明显的事情是不被人注意的。