asp.net - mvc - signalr net core
SignalR/signalr/hubs 404 no encontrado (13)
Asegúrese de que la AppPool de su sitio esté orientada a la versión correcta de .NET Framework.
Estoy tratando de implementar un sitio SignalR en IIS. El código funciona bien en VS. Pero al obtener el error 404 no encontrado tratando de resolver señalizador / hubs hasta ahora lo he intentado.
1) Cambiar la referencia del script a:
script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>
2) Modificar Web.Config para incluir:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
3) Cambiar las solicitudes de invocación en IIS para UrlMappingsModule
.
4) agregó SignalR.Hosting.AspNet.dll
para ver si eso ayudaría.
¿No está seguro de qué más probar o verificar, alguna ayuda o señalar en la dirección correcta?
El orden del registro de la ruta es importante. Tuve este problema exacto y lo solucioné asegurándome de que mi global.asax.cs se viera así:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteTable.Routes.MapHubs();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
Esto fue en un sitio web usando SignalR, MVC y WebApi todos juntos.
En mi caso, pierdo algunas dependencias de owin luego obtuve el error 404 NotFound .
Cuando agregué las siguientes dependencias, recupero el archivo proxy javascript claramente de la URL que esperaba. Como URL: 1111 / singlar / hubs
- Microsoft.Owin
- Microsoft.Owin.Core
- Microsoft.Owin.Host.SystemWeb
- Microsoft.Owin.Security
- Owin
Espero que la respuesta ayude a alguien.
Intente agregar un mapa de aplicación de comodín a su servidor para ayudar a mapear la extensión desconocida en la URL del script "~ / signalr / hubs"
La razón de este error 404 es que los hubs no están mapeados, anteriormente tendría que ser hecho como respondió SimonF. Si está utilizando SignalR versión 2 RouteTable.Routes.MapHubs();
ahora está obsoleto Para mapear centros, 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();
}
}
}
referenace: http://www.asp.net/signalr/overview/releases/upgrading-signalr-1x-projects-to-20
No tuve problemas con el enrutamiento en MVC3, pero me equivoqué. Sugiero que mires la fuente y veas dónde está apuntando realmente la secuencia de comandos, asegúrate de que está resolviendo el directorio de la aplicación. Y asegúrese de que puede abrir físicamente el archivo con la ruta correcta con su navegador. P.ej
<script src="/MyWebApp/signalr/hubs" type="text/javascript"></script>
¿Puedes abrir el archivo desde un navegador (reemplazándolo con el subdirectorio correcto)?
De lo contrario, es posible que el concentrador no esté configurado correctamente y podría orientarlo en la dirección correcta. Violinista.
La sintaxis que utilicé fue:
<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>
Puede ser la diferencia entre Url.Content y ResolveUrl
Para mí, la solución fue reinstall
todos los paquetes y restaurar todas las dependencias.
Abre nuget powershell
y utiliza este comando.
Update-Package -Reinstall
Podría llegar un poco tarde, pero espero que ayude a alguien. Asegúrate de que este código se ejecute al inicio.
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
RouteTable.Routes.MapHubs()
End Sub
Porque agregué un archivo.asax global a mi aplicación y luego un código subyacente, pero puse esto en el archivo Global.asax
<%@ Application Language="VB" CodeBehind = "Global.asax.vb" %> /*This was wrong*/
Entonces, cuando intenté ejecutar la aplicación, Application_Start en mi global.asax no inicializó el hub. es por eso que no pudo resolver signalr / hubs
arreglado con esto en mi Global.asax
<%@ Application Inherits="_Global" Language="VB" %>
y esto en mi Global.asax.vb:
Public Class _Global
Inherits System.Web.HttpApplication
Problema similar que tuve en la versión de IIS, lo solucioné al reiniciar AppPool, reiniciar la web y su funcionamiento ahora.
Pude arreglar el 404 en ~ / signalr / hubs cambiando la siguiente appSetting en web.config a "true".
<add key="owin:AutomaticAppStartup" value="false" />
Si está trabajando en formularios web, siga los siguientes pasos
En el webconfig:
<validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true"/>
En la página, agregue referencia al concentrador como
<script src="/signalr/signalr/hubs"></script>
en lugar de
<script src="/signalr/hubs"></script>
Tuve el mismo problema, era un proyecto asp.net que usa signalR, funcionó correctamente antes de publicar pero cuando lo alojé en IIS, no fue así.
Después de inspeccionar me di cuenta de que la dirección / signalr / hubs no es correcta, permítanme explicar más, solo haga los siguientes pasos:
Abra su aplicación web en el navegador (usando IIS), verá la interfaz que diseñó, ¿sí? ahora presione
ctrl+U
o haga clic con el botón derecho en la página y seleccione Ver fuente de la página.Verá varios enlaces que comienzan con la etiqueta
<script>
en la parte superior de la página, busque algo como<script src="/signalr/hubs"></script>
ahora haga clic en él, si lo llevan a la página que implica "404 - Archivo o directorio no encontrado". Tiene algunos errores al definir la dirección, encontrar la dirección verdadera y cambiar la dirección en la barra de direcciones para observar el verdadero resultado
En mi caso, necesitaba agregar el nombre de mi proyecto al inicio de la dirección, así que tuve que cambiar la dirección de:
<script src="/signalr/hubs"></script>
a
<script src="/MoveShape/signalr/hubs"></script>
en el cual MoveShape era el nombre de mi proyecto, ahora luego de presionar ctrl+U
en el navegador y seguir los pasos anteriores, hace clic en el enlace y esta vez puede ver el resultado verdadero, los códigos de la página muestran:
/*!
* ASP.NET SignalR JavaScript Library v2.2.2
* http://signalr.net/
*
* Copyright (c) .NET Foundation. All rights reserved.
* Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
*
*/
¡sí! eso es todo, funciona correctamente, tenga en cuenta que no tenía ningún problema cuando lo estaba probando usando Visual Studio pero no después de alojarlo en IIS, ya que otros recomendaron hacer una dirección correcta al aplicar <%= ResolveUrl("~/") %>
u otros métodos.
hay potencialmente muchas causas de este 404 - algunas comunes se pueden encontrar por
- Pulse la url en el navegador / signalr / hubs: si hay un error, verá que vuelve el error completo.
- compruebe la duplicación del atributo HubName si tiene una clase base
- asegúrese de tener la versión correcta a la que se hace referencia en todos los proyectos (para evitar errores de enlace)