net mvc example aspnet c# asp.net signalr

c# - mvc - SignalR "signalr/hubs" que da error 404



signalr net core (19)

¿Acabas de instalar IIS? En este caso es posible que tenga que volver a instalarlo:

c:/Windows/Microsoft.NET/Framework/v4.0.30319/aspnet_regiis.exe -i

Estoy usando SignalR (https://github.com/SignalR/SignalR) en mi proyecto. Desde aquí https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs tuve la idea de cómo usar Hubs. Pero el script "signalr / hubs" está dando un error 404. Aquí está la url que se convierte en Ver código fuente: http://localhost:50378/signalr/hubs dando error 404

Aquí está mi código: Hub:

public class Test:Hub { public void Start() { Caller.guid = Guid.NewGuid(); } public void TestMethod() { Clients.show("test", Caller.guid); } }

ASPX:

<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Title</title> <script src="../Scripts/jquery-1.6.4.min.js" type="text/javascript"></script> <script src="../Scripts/jquery.signalR.js" type="text/javascript"></script> <script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function () { var test = $.connection.test; $("#btnTest").click(function () { test.testMethod(); }); test.show = function (text, guid) { if (guid != test.guid) //notify all clients except the caller alert(text); }; $.connection.hub.start(function () { test.start(); }); }); </script> </head> <body> <form id="HtmlForm" runat="server"> <div> </div> </form> </body> </html>

Web.config:

<system.webServer> <validation validateIntegratedModeConfiguration="false"/> <modules runAllManagedModulesForAllRequests="true"> ....


Desde el SignalR 1.0.0 RC2 hay un archivo README en la carpeta de paquetes que dice que la ruta de Hubs debe establecerse manualmente. :) Aquí hay un fragmento ...

using System; using System.Web; using System.Web.Routing; namespace MyWebApplication { public class Global : System.Web.HttpApplication { public void Application_Start() { // Register the default hubs route: ~/signalr RouteTable.Routes.MapHubs(); } } }


En mi caso, la razón principal de este 404 es que los concentradores no se asignaron correctamente. RouteTable.Routes.MapHubs(); Ahora está obsoleto. Para la asignación de hubs, puede crear una clase de inicio como se muestra a continuación.

[assembly: OwinStartup(typeof(WebApplication1.Startup))] namespace WebApplication1 { public class Startup { public void Configuration(IAppBuilder app) { // Any connection or hub wire up and configuration should go here app.MapSignalR(); } } }


En pocas palabras, en mi caso utilicé R # (ReSharper) , hice clic derecho en mi proyecto que usa SignalR y seleccioné Refactor => Eliminar referencias no utilizadas. Cuidado: esto es un disparo en el pie . :RE

Se eliminaron las referencias DLL IMPORTANTES de SignalR que se usan solo durante el tiempo de ejecución, es decir, no son necesarias durante el tiempo de compilación. Obviamente, R # solo verifica las dependencias de tiempo de compilación.

Es decir, estas 2 referencias faltaban:

  1. Microsoft.AspNet.SignalR.SystemWeb
  2. Microsoft.Owin.Host.SystemWeb (sin este no se alcanzará un punto de interrupción en el método de configuración de SignalR OWIN).

Quitó los paquetes de NuGet y luego los reinstaló. Solucionado el problema /hubs 404.


Esta es una respuesta completa de la wiki de SignalR ( https://github.com/SignalR/SignalR/wiki/Faq ). Funcionó conmigo:

Primero, asegúrese de que tiene una llamada a MapHubs () en Global.asax.

Asegúrese de que la ruta del concentrador esté registrada antes que cualquier otra ruta en su aplicación.

RouteTable.Routes.MapHubs();

En ASP.NET MVC 4 puedes hacer lo siguiente:

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

Si está escribiendo una aplicación MVC 3, asegúrese de estar usando Url.Content para sus referencias de script:

<script type="text/javascript" src="@Url.Content("~/signalr/hubs")"></script>

Si está escribiendo una aplicación ASP.NET normal, use ResolveClientUrl para las referencias de su script:

<script type="text/javascript" src=''<%= ResolveClientUrl("~/signalr/hubs") %>''></script>

Si lo anterior todavía no funciona, asegúrese de tener configurado RAMMFAR en su web.config:

<configuration> <system.webServer> <modules runAllManagedModulesForAllRequests="true"> </modules> </system.webServer> </configuration>


Intente llamar a RouteTable.Routes.MapHubs () antes de RouteConfig.RegisterRoutes (RouteTable.Routes) en Global.asax.cs si usa MVC 4. Funciona para mí.

RouteTable.Routes.MapHubs(); RouteConfig.RegisterRoutes(RouteTable.Routes);


Mi proyecto es ASP.net 4.0 C # Web App, el entorno de prueba es Windows Server 2012.

Tuve el mismo problema con 1.0.0 RC2, hice lo que Michael sugiere y funciona. Gracias.

@MatteKarla: Al instalar SignalR 1.0.0 RC2 de NuGet, se agregan las siguientes referencias al proyecto:

  • Microsoft.AspNet.SignalR.Core
  • Microsoft.AspNet.SignalR.Owin
  • Microsoft.AspNet.SignalR.SystemWeb
  • Microsoft.Owin.Host.SystemWeb

Tengo que agregar Microsoft.CSharp manualmente o se producirá un error durante la compilación:

  • El tipo predefinido ''Microsoft.CSharp.RuntimeBinder.Binder'' no está definido ni importado

No necesita el archivo signalr / hubs, solo para tener una depuración más sencilla y una forma sencilla de llamar a una función. vea: vea lo que el proxy generado hace por usted , eso es todo. Las cosas funcionarán sin él.


Para mí, la solución fue reinstalar todos los paquetes y restaurar todas las dependencias.

Abre nuget powershell y usa este comando.

Update-Package -Reinstall


Puede ser que no haya agregado una referencia a SignalR.AspNet.dll . Si recuerdo correctamente, es responsable de agregar la ruta a /signalr/hubs .


Quizás vale la pena mencionar: estoy ejecutando una aplicación de Web Forms que utiliza su propio enrutamiento manual. Dado que el inicio de OWIN se produce después de que se hayan establecido las tablas de enrutamiento, la ruta para / signalr / hubs nunca fue afectada. Agregué una regla para ignorar las rutas (IE: permitir que los formularios web realicen el enrutamiento) en cualquier ruta que comience con "/ signalr". Esto solucionó mi problema.


Resolví este problema cambiando el grupo de aplicaciones .NET Framework Version de v2.0 a v4.0.


También he luchado con este problema y finalmente llegué al punto en que estaba causando el problema. En primer lugar, debo decir que con SignalR v2 llamando a RouteTable.Routes.MapHubs(); dentro de Globalasax / Application_Start está obsoleto y el compilador incluso emite una advertencia. En su lugar, ahora agregamos una clase StartUp dedicada con el siguiente método público:

public void Configuration(IAppBuilder app) { app.MapSignalR(); }

Toda la configuración va aquí. Consulte la documentation para obtener más información.

Ahora, después de pasar muchas horas buscando en Google como un loco, decidí lanzar una Excepción dentro del método Configurar de la clase de Inicio que mencioné anteriormente. Si no se lanzara una excepción, entendería que Owin ni siquiera comienza. Mi conjetura era correcta. Por alguna razón, Owin no estaba empezando o algo lo estaba suprimiendo. En mi caso, fue esta configuración mal configurada en mi archivo web.config:

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

Supongo que el nombre de la configuración es bastante descriptivo. Quita esto o cambia falso a verdadero.


Tuve el mismo problema al ejecutar mi código con el servidor de desarrollo de Visual Studio y funcionó cuando cambié la configuración de mi proyecto para usar el servidor web local de IIS.

Se planteó un defecto contra este problema que David Fowler comentó. El problema se solucionará en futuras versiones, pero en este momento esta es la solución. No puedo encontrar el enlace al error en este momento.


Tuve estos errores 404 cuando actualicé a Signalr 2.0 y desplegé el proyecto MVC en el servidor de producción. El proyecto de publicación con la opción "eliminar todos los archivos existentes antes de publicar" guardó mis problemas.

Espero que esto ayude a alguien.


Yo también encontré este mismo problema en una aplicación de formularios web ASP.NET 4.0. Funcionó en servidores de desarrollo, pero no en entornos de producción. La solución de garantizar que todas las solicitudes / módulos se ejecuten en modo administrado no fue aceptable para nosotros.

La solución que utilizamos (mejor para formularios web de ASP.NET) es la siguiente. Agregue la siguiente sección a Web.Config:

<modules> <remove name="UrlRoutingModule-4.0" /> <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> <!-- any other modules you want to run in MVC e.g. FormsAuthentication, Roles etc. --> </modules>


añadiendo app.MapSignalR(); en la clase de Startup resuelve el problema


puede deberse a que el nombre de su clase de concentrador es "Prueba" y se refiere a "prueba" en el lado del cliente


@Url.Content hacer referencia al archivo JavaScript con @Url.Content , asumiendo que está usando ASP.NET MVC3

Me gusta:

<script src="@Url.Content("~/Scripts/jquery.signalR.min.js")" type="text/javascript"></script>

Vea las preguntas frecuentes de SignalR en GitHub

Edición: Como mencionó Trevor De Koekkoek en su comentario, no es necesario que agregue @Url.Content si está utilizando MVC4 o posterior. Simplemente anteponer el uri con ~/ basta. Para obtener más información, consulte esta otra pregunta de SO .