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

时间:2014-11-05 06:06:56

标签: c# asp.net-mvc proxy signalr

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);
        }
    }
}

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

<script src="~/Scripts/jquery.signalR-2.1.0.min.js"></script>
<script src="~/signalr/hubs"></script>

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

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

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

任何帮助都将不胜感激。

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

<!DOCTYPE html>
<html>
<head>
    <title>The resource cannot be found.</title>
    <meta name="viewport" content="width=device-width" />
</head>

<body bgcolor="white">

        <span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>

        <h2> <i>The resource cannot be found.</i> </h2></span>

        <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

        <b> Description: </b>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. &nbsp;Please review the following URL and make sure that it is spelled correctly.
        <br><br>

        <b> Requested URL: </b>/signalr/hubs<br><br>

        <hr width=100% size=1 color=silver>

        <b>Version Information:</b>&nbsp;Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34212

        </font>

</body>

[HttpException]: The controller for path &#39;/signalr/hubs&#39; 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)

3 个答案:

答案 0 :(得分:9)

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

验证link

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

  

Install-Package Microsoft.Owin.Host.SystemWeb

<强>更新

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

  • 我相信配置文件<add key="owin:AutomaticAppStartup" value="false" />
  • 中不再存在此密钥
  • 您的应用程序可能会缓存在临时文件夹中,请尝试删除应用程序的临时文件。(转到运行&gt;%TEMP%&gt; CTRL + A&gt;删除)

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

答案 1 :(得分:3)

像米洛斯一样说,清除临时文件夹可能会解决问题。 我已经创建了一个脚本来执行此操作,我将其称为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的清除应该清除临时文件。

答案 2 :(得分:1)

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

  

检查Scripts文件夹中的SignalR库的版本和那个   在您的视图中引用。

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

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