web-dev-qa-db-fra.com

SignalR / signalr / hubs 404 introuvable

J'essaie de déployer un site SignalR sur IIS. Le code fonctionne parfaitement dans VS. Mais obtenir l'erreur 404 introuvable en essayant de résoudre signalr/hubs jusqu'à présent, j'ai essayé.

1) Changer la référence du script en:

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

2) Modification de Web.Config pour inclure:

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

3) Modification des demandes d'appel sur IIS pour UrlMappingsModule.

4) ajouté SignalR.Hosting.AspNet.dll pour voir si cela pourrait aider quelque chose.

Vous ne savez pas quoi essayer ou vérifier, une aide ou un point dans la bonne direction?

34
user685590

Essayez d'ajouter une carte d'application générique à votre serveur pour aider à mapper l'extension inconnue dans l'URL de script "~/signalr/hubs"

13
chridam

L'ordre d'enregistrement des itinéraires est important. J'ai eu ce problème exact et je l'ai résolu en m'assurant que mon global.asax.cs ressemblait à ceci:

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

C'était dans un site Web utilisant SignalR, MVC et WebApi tous ensemble.

30
SimonF

La raison de cette erreur 404 est que les concentrateurs ne sont pas mappés, auparavant cela devait être fait comme l'a répondu SimonF. Si vous utilisez SignalR version 2 RouteTable.Routes.MapHubs(); est désormais obsolète. Pour les hubs de mappage, vous pouvez créer une classe de démarrage comme ci-dessous.

[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-2

17
Chaitanya Gadkari

Si vous travaillez sur des formulaires Web, veuillez suivre les étapes suivantes

  1. Dans la configuration Web:

    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true"/>
    
  2. Dans la page, ajoutez la référence au concentrateur comme

    <script src="/signalr/signalr/hubs"></script>
    

    au lieu de

    <script src="/signalr/hubs"></script>
    
7
Sobinscott

J'ai pu réparer le 404 sur ~/signalr/hubs en changeant l'appSetting suivant dans web.config sur "true".

<add key="owin:AutomaticAppStartup" value="false" />
3
Randy H.

Je suis peut-être un peu en retard, mais j'espère que cela aide quelqu'un. Assurez-vous que ce code s'exécute au démarrage.

 Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    RouteTable.Routes.MapHubs()
 End Sub

Parce que j'ai ajouté un global.asax à mon application, puis un codebehind mais je l'ai mis dans le fichier Global.asax

 <%@ Application Language="VB" CodeBehind = "Global.asax.vb" %> /*This was wrong*/

Ainsi, lorsque j'ai essayé d'exécuter l'application, l'Application_Start dans mon global.asax n'a pas initialisé le concentrateur. c'est pourquoi il n'a pas pu résoudre les signaux/hubs

corrigé avec cela dans mon Global.asax

 <%@ Application Inherits="_Global" Language="VB" %>

et cela dans mon Global.asax.vb:

 Public Class _Global
     Inherits System.Web.HttpApplication
1
Seichi

Assurez-vous que l'AppPool de votre site cible la bonne version de .NET Framework.

1
Sasha

il y a potentiellement de nombreuses causes de ce 404 - quelques-unes peuvent être trouvées par

  • Appuyez sur l'URL dans le navigateur/signalr/hubs - s'il y a une erreur, vous verrez l'erreur complète revenir.
  • vérifier la duplication de l'attribut HubName si vous avez une classe de base
  • assurez-vous d'avoir la bonne version référencée dans tous les projets (pour éviter les erreurs de liaison)
0
JonathanC

Pour moi, la solution était de reinstall tous les packages et de restaurer toutes les dépendances.

Ouvrez nuget powershell et utilisez cette commande.

Update-Package -Reinstall
0

Je n'ai eu aucun problème avec le routage dans MVC3, mais je me suis trompé de chemin. Je vous suggère de regarder la source et de voir où le script pointe réellement, assurez-vous qu'il résout le répertoire d'application ok. Et assurez-vous que vous pouvez physiquement ouvrir le fichier avec le bon chemin avec votre navigateur. Par exemple.

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

Pouvez-vous ouvrir le fichier à partir d'un navigateur (en le remplaçant par le sous-répertoire correct)?

Sinon, le concentrateur peut ne pas être configuré correctement et il peut vous orienter dans la bonne direction. Fiddler it.

La syntaxe que j'ai utilisée était:

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

Cela pourrait être la différence entre rl.Content et ResolveUrl

0
Stuart Chaulk

J'ai eu le même problème, c'était un projet asp.net utilisant signalR, il fonctionnait correctement avant ma publication mais quand je l'ai hébergé dans IIS, il ne l'a pas fait.

Après avoir inspecté, je me suis rendu compte que l'adresse/signalr/hubs n'est pas correcte, laissez-moi vous expliquer plus, procédez comme suit:

  1. Ouvrez votre application Web dans le navigateur (en utilisant IIS), vous voyez l'interface que vous avez conçue, oui? appuyez maintenant sur ctrl+U ou faites un clic droit sur la page et sélectionnez Afficher la source de la page.

  2. Vous verrez plusieurs liens commençant par la balise <script> En haut de la page, trouvez quelque chose comme <script src="/signalr/hubs"></script> Maintenant cliquez dessus, si vous êtes redirigé vers la page contenant "404 - Fichier ou répertoire introuvable. "vous avez des erreurs dans la définition de l'adresse, recherchez la vraie adresse et changez l'adresse dans la barre d'adresse pour observer le vrai résultat

Dans mon cas, je devais ajouter le nom de mon projet au début de l'adresse, j'ai donc dû changer l'adresse de:

<script src="/signalr/hubs"></script>

à

<script src="/MoveShape/signalr/hubs"></script>

dans lequel MoveShape était le nom de mon projet, maintenant après avoir appuyé sur ctrl+U dans le navigateur et après les étapes précédemment décrites, vous cliquez sur le lien et cette fois vous voyez le vrai résultat, la page affiche les codes commençant par:

/*!
 * 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.
 *
 */

ouais! ça y est, cela fonctionne correctement, gardez à l'esprit qu'il n'a eu aucun problème lorsque je le testais à l'aide de Visual studio mais pas après l'hébergement dans IIS, car d'autres ont recommandé de faire une adresse correcte en appliquant <%= ResolveUrl("~/") %> ou d'autres méthodes .

0
Mohammad Musavi

Problème similaire que j'ai eu sur la version IIS, je l'ai corrigé en redémarrant AppPool, redémarrez le Web et son fonctionnement maintenant.

0
Usman