2 votes

SignalR : Erreur de chargement des hubs. 404 non trouvé

Je travaille avec une application angulaire 5, que j'essaie de mettre en œuvre SignalR. Et j'obtiens 2 erreurs qui, j'imagine, sont la même chose. La première est :

Impossible de charger la ressource : le serveur a répondu avec le statut 404 (non trouvé).

et la seconde est :

ERROR Erreur : SignalR : Erreur de chargement des hubs. Assurez-vous que la référence de vos hubs est correcte, par exemple .

Cela dit, j'ai fait des recherches à ce sujet et j'ai vu quelques options qui faisaient principalement référence à une ancienne version de siganalR.

J'ai suivi le Tutoriel sur ce point et a ajouté un Hub

[HubName("EventContractHub")]
public class EventContractHub : Hub, IClientHub
{
    public void SendId(int id)
    {
        Clients.All.Send(id);
    }
}

avec un Startup.cs classe qui ressemble à...

[assembly:OwinStartUp(typeof(blah.Startup))]
namespace blah
{
   public class Startup
   {
      public void Configuration(IAppBuilder app)
      {
          // Other configuration here
          app.MapSignalR();
      }
   }
}

Et mon _Layout.cshtml a une référence qui ressemble à :

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.signalR-2.2.3.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="~/signalr/hubs"></script>

Quelqu'un sait-il pourquoi cela se produit en ce moment ?

L'url 404 not found est : http://localhost/IntelliM/signalr/hubs

Je dois mentionner que j'ai une api fonctionnant sur le même serveur en utilisant Owin également. Je ne sais pas si cela va changer quelque chose. Si c'est le cas, je peux poster la configuration pour cela aussi.

Veuillez comprendre que j'ai dû supprimer une partie du code ici, j'ai laissé le code pertinent :

   public void Configuration(IAppBuilder app)
    {

        if (/*Logic for License*/)
        {
            app.Map("/identity", ssocf =>
            {

            });
        }

        JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "Cookies"
        });

        app.UseOpenIdConnectAuthenticationPatched(new OpenIdConnectAuthenticationOptions
        {

            SignInAsAuthenticationType = "Cookies",

            Notifications = new OpenIdConnectAuthenticationNotifications
            {
                AuthorizationCodeReceived = async n =>
                {

                    /*
                     * Add Clams here
                     */
                },

                SecurityTokenValidated = async n =>
                {

                        /*Create Token Here*/
                },

                RedirectToIdentityProvider = n =>
                {

                }
            }
        });

        //Setting WebAPI Auth
        var config = new HttpConfiguration();
        config.Formatters.Remove(config.Formatters.XmlFormatter);
        //config.SuppressDefaultHostAuthentication();

        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
        {
            Authority = authority
        });

        app.UseWebApi(config);
        app.MapSignalR();
    }

}

2voto

Nkosi Points 95895

Vérification des notes du tutoriel lié

Important

Lorsque vous ajoutez SignalR et d'autres bibliothèques script à votre projet Visual Studio, le gestionnaire de paquets peut installer une version du fichier script de SignalR qui est plus récente que la version présentée dans cette rubrique. Assurez-vous que la référence script dans votre code correspond à la version de la bibliothèque script installée dans votre projet.

Assurez-vous donc d'abord que vous avez les bonnes versions référencées.

Envisagez d'ajouter les références pertinentes de SignalR à une liasse.

public class BundleConfig {
    public static void RegisterBundles(BundleCollection bundles) {
        //... other bundles

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

        bundles.Add(new ScriptBundle("~/bundles/signalr").Include(
            "~/Scripts/jquery.signalr-*", //the * wildcard will get script regardless of version
            "~/signalr/hubs"));

        //Enable minification
        BundleTable.EnableOptimizations = true;
    }
}

//...in start up
BundleConfig.RegisterBundles(BundleTable.Bundles);

et dans la vue

<!-- javascript: Placed at the end of the document so the pages load faster -->
@Scripts.Render("~/bundles/jquery", "~/bundles/signalr")

Du point de vue du routage également, vous devez vous assurer, lors de l'ajout à un projet mixte, qu'il n'y a pas d'autres routes conflictuelles, car l'ordre dans lequel il a été ajouté au pipeline de l'intergiciel peut affecter le routage vers le concentrateur.

Par exemple

public void Configuration(IAppBuilder app) {
    //Auth
    this.ConfigureAuth(app);

    //SignalR 
    app.MapSignalR();

    //...other configuration.
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X