50 votes

SignalR "signalr/hubs" donnant erreur 404

Je suis SignalR(https://github.com/SignalR/SignalR) dans mon projet. À partir d'ici https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs j'ai eu l'idée de comment l'utiliser Hubs. Mais le "signalr/hubs" script est de donner un message d'erreur 404. Voici l'url du site qui devient dans l'Affichage de la Source: http://localhost:50378/signalr/hubs donnant erreur 404

Voici mon code: 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">
....

44voto

Adamy Points 735

Essayez d'appel RouteTable.Les itinéraires.MapHubs() avant RouteConfig.RegisterRoutes(RouteTable.Itinéraires) en Global.asax.cs si vous utilisez MVC 4. Il fonctionne pour moi.

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

29voto

MatteKarla Points 1516

Il se pourrait que vous n'avez pas ajouté une référence à l' SignalR.AspNet.dll. Si je me souviens bien il est responsable de l'ajout de l'itinéraire pour /signalr/hubs.

14voto

Michael Points 325

À partir de la SignalR 1.0.0 RC2 il y a un fichier README dans le dossier packages qui dit que le Moyeux de la route doivent être établis manuellement. :) Voici un extrait...

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

4voto

SecretDeveloper Points 1869

J'ai eu ce même problème lors de l'exécution de mon code en utilisant le serveur de développement Visual Studio et cela a fonctionné quand j'ai changé mes paramètres de projet pour utiliser IIS Serveur Web Local.

enter image description here

Il y a un vice soulevée à l'encontre de ce problème qui David Fowler commenté. Le problème sera corrigé dans les prochaines versions, mais pour l'instant c'est la solution de contournement. Je ne peux pas trouver le lien pour le bug pour le moment.

3voto

Anzeo Points 6071

Vous avez besoin de référencer le fichier JavaScript avec @Url.Content, en supposant que ous êtes à l'aide de ASP.NET MVC3

Comme:

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

Voir la SignalR FAQ sur GitHub

Edit: Comme Trevor De Koekkoek mentionné dans son commentaire, vous n'avez pas besoin d'ajouter @Url.Content vous-même si vous êtes en utilisant MVC4 ou plus tard. Simplement en ajoutant l'uri avec ~/ suffit. Pour plus d'informations, découvrez cet autre DONC, la question.

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