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

Mil*_*vic 5 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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我觉得这里没问题,但也许我错过了什么......

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

namespace SISTEM
{
    public class PostingHub : Hub
    {
        public void Test(string hello)
        {
            Clients.All.hello(hello);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

<script src="~/Scripts/jquery.signalR-2.1.0.min.js"></script>
<script src="~/signalr/hubs"></script>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 修补无扩展URL的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>
Run Code Online (Sandbox Code Playgroud)

[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)
Run Code Online (Sandbox Code Playgroud)

Mox*_*hah 10

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

验证此链接

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

安装包Microsoft.Owin.Host.SystemWeb

UPDATE

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

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

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

  • 没运气.我将Microsoft.Owin.Host.SystemWeb从版本2重新安装到版本3但没有任何改变.我将更新我的帖子,以查看对/ signalr/hubs请求的响应.app.MapSignalR(); 仍然没有被击中. (2认同)
  • 清除临时文件夹是解决方案的90%.它开始点击app.MapSignalR(); 之后.之后还有另一个依赖性问题,但这不是真正的问题.感谢你的帮助. (2认同)