asp.net-mvc-4 http-status-code-404 signalr signalr-hub

asp.net mvc 4 - / signalr/hubs no cargando en asp.net mvc4: Lanzamientos 404



asp.net-mvc-4 http-status-code-404 (7)

Aquí esta lo que hice.

  1. Utilicé nuget para obtener el SignalR para mi proyecto MVC4.
  2. Creé una clase MyHub en mi controlador (SignalRTestController.cs)
  3. En Index Action, intentó transmitir un mensaje desde fuera del concentrador y devolvió la vista.
  4. En la vista, hace referencia a todos los scripts y / signalr / hubs.

El problema es que no se encuentran / signalr / hubs (arroja 404).

Mi proyecto tiene áreas y está estructurado como se muestra:

  1. MVCProject
    • Áreas
      • SubFolder
        • Controlador
          • SignalRTestController.cs
        • Modelo
        • Ver
          • Index.cshtml
    • Controlador
    • Modelo
    • Ver
    • Guiones

Todos los scripts para signalR están dentro de la carpeta Scripts y mi SignalRTestController.cs se ve así:

namespace SignalRTest.Controllers { public class SignalRTestController : Controller { public ActionResult Index() { // Do some work here // Broadcasting over a Hub from outside of a Hub var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); context.Clients.say("Hello SignalR!"); return View(); } } [HubName("MyHub")] public class MyHub : Hub { public void Say(string message) { Clients.sendMessage(message); } } }

Cualquiera de mis Index.cshtml tiene referencia a todos los javascripts y / signalr / hubs como a continuación: // Other Javascripts

script type = "text / javascript" src = "/ signalr / hubs" />

Creo que el controlador está bien, pero no estoy recibiendo / signalr / hubs. Está lanzando 404 y el mensaje en Chrome Console es así:

Recurso interpretado como Script pero transferido con texto tipo MIME / html: "http://www.myproject.com/signalr/hubs". Untaught SyntaxError: Token inesperado <hubs: 2 SignalR no detectado: Error al cargar hubs. Asegúrese de que la referencia de su hub es correcta, por ejemplo, script src = ''/ signalr / hubs''>.

El motivo por el que se devuelve el script como html es que el servidor devuelve 404 no encontrado.

No estoy seguro de lo que está mal. Creo que esto podría ser un problema de enrutamiento. No estoy seguro, si necesitamos agregar alguna información de enrutamiento en el proyecto para / signalr / hubs o me falta algo aquí.

FYI: Cuando creo un nuevo proyecto MVC vacío y agrego signalR y comienzo a trabajar en él, funciona perfectamente bien. No es necesario agregar enrutamiento.

Además, utilizo enrutamiento predeterminado y enrutamiento de atributos en algunos lugares. Pero el controlador SignalRTestController no usa el enrutamiento de atributos.


Intenta cambiar [HubName("MyHub")] a [HubName("myHub")] y asegúrate de actualizar cada vez que crees el proxy en tu javascript. Me funcionó en el pasado.


Usted tiene un problema con la referencia. Haz lo siguiente:

  1. En su AppStart / Bundle.Config.cs agregue esto:

    bundles.Add(new ScriptBundle("~/bundles/signalR").Include( "~/Scripts/jquery.signalR-{version}.js"));

  2. En layout.cshtml agrega esto:

    @ Scripts.Render ("~ / bundles / signalR")

  3. En su página que está usando signalR, asegúrese de hacer referencia a hubs signalR como sigue:

/ signalr / hubs

como se hace en esta página: http://blog.devscrum.net/2011/12/getting-started-with-signalr-in-asp-net-mvc/ (sección donde dice: "En index.cshtml, agregue el siguiente código ")


Estaba experimentando el mismo problema. Aquí está la solución:

Nuget no agregó todas las referencias necesarias. Volví a usar este comando:

Install-Package Microsoft.AspNet.SignalR -pre

y agregó algunas referencias más:

  • Microsoft.AspNet.SignalR.Hosting.Aspnet
  • Microsoft.AspNet.SignalR.Hosting.Common

una vez que se hizo, ¡funcionó como un campeón!


¿Tiene una llamada a RouteTable.Routes.MapHubs () (probablemente en Global.asax)? Si es así, trate de deshacerse de eso y vea si soluciona su problema. - Pete, 16 de noviembre a las 17:22

He estado jugando con eso un poco más. Parece que en la versión actual (recibí la última fuente porque necesitaba un ensamblado firmado), debe llamar a RouteTable.Routes.MapHubs (). Pero para que funcione, primero se tuvo que llamar (o al menos antes de la llamada RouteConfig.RegisterRoutes ()). Si fue llamado después de eso, MVC busca un controlador para él y eso no funciona. En la versión anterior que estaba usando que se obtuvo a través de nuGet, eliminar RouteTable.Routes.MapHubs () funcionó para solucionar el problema, pero ahora parece ser necesario. Espero que sea útil. - Pete el 27 de noviembre a las 20:53

Aparentemente resolvió el problema cambiando RouteTable.Routes.MapHubs () a: RouteTable.Routes.MapHubs ("~ / signalr").


En mi caso, había creado accidentalmente dos clases Hub con el mismo nombre en diferentes lugares (dos clases que se derivan de Hub). Saqué uno y todo funcionó.


MapHubs ahora está obsoleto. Use el método de extensión MapSignalR en la clase de inicio de Owin, así:

[assembly: OwinStartupAttribute(typeof(signalr_test.Startup))] namespace signalr_test { public partial class Startup { public void Configuration(IAppBuilder app) { ConfigureAuth(app); app.MapSignalR(); //can take path also see overloads... } } }


En mi caso, había una clave en la configuración de la aplicación web.config que tuve que eliminar:

<add key="owin:AutomaticAppStartup" value="false" />