2017-01-30 1 views
3

Je suis en train de faire un simple compteur d'utilisateur avec SignalR, mais pour des raisons inconnues pour moi, je reçois cette erreur dans la console. Je suis très nouveau pour signalR et asp.net, mais ce que j'ai de sens pour moi, et je ne sais pas pourquoi je reçois l'erreur. Quelqu'un peut-il m'aider s'il vous plaît à résoudre cela et éventuellement expliquer pourquoi cela se passe?Impossible de lire la propriété 'counterHub' de undefined

Voici le code dans la vue Index.

<div class="row"> 
Number of online users <strong id="counter"></strong> 
<script src="@Url.Content("~/Scripts/jquery-3.1.1.min.js")"></script> 
<script src="@Url.Content("~/Scripts/jquery.signalR-2.2.1.min.js")"></script> 
<script src="@Url.Content("~/signalr/hubs")"></script> 

<script> 
    $(function() { 
     var counterHub = $.connection.counterHub; 
     $.connection.hub.start().done(function() { 

     }); 
     counterHub.client.UpdateCount = function (count) { 
      $("#counter").text(count); 
     } 
    }); 

</script> 

La classe moyeu:

public class CounterHub : Hub 
{ 
    static long counter = 0; 
    public override System.Threading.Tasks.Task OnConnected() 
    { 
     counter = counter + 1; 
     Clients.All.UpdateCount(counter); 
     return base.OnConnected(); 
    } 

    public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled) 
    { 
     counter = counter - 1; 
     Clients.All.UpdateCount(counter); 
     return base.OnDisconnected(stopCalled); 
    } 

    //public void Hello() 
    //{ 
    // Clients.All.hello(); 
    //} 
} 

Et les Startup.cs:

public partial class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.MapSignalR(); 

      ConfigureAuth(app); 

     } 
    } 
+0

Utilisez-vous 'counterHub' ailleurs? – Satpal

+0

Non, je ne l'utilise nulle part ailleurs. J'ai posté tout le code où il peut être rencontré –

+0

Quelle est votre version de Visual Studio? –

Répondre

0

Est-ce vos fichiers de chat dans la racine de l'application?

La seule chose que je pense est votre page n'a pas connecté au proxy Hub fichier javascript:

ASP.NET SignalR JavaScript Library v1.0.0

Ce fichier a quelques méthodes pour se connecter au centre, se compose:

$.hubConnection.prototype.createHubProxies = function() { 
    var proxies = {}; 
    this.starting(function() { 
     // Register the hub proxies as subscribed 
     // (instance, shouldSubscribe) 
     registerHubProxies(proxies, true); 

     this._registerSubscribedHubs(); ....... 

Ce manque de cette méthode fait votre erreur:

Cannot read property 'counterHub' of undefined

Parce qu'il ne peut pas se connecter à table de cuisson et créer obj ec nommé counterHub.

Alors s'il vous plaît tester ceci: Après le chargement de votre application dans un autre onglet de votre test de navigateur l'adresse suivante:

Your-App-Url/signalr/hubs

que dans l'hôte local est quelque chose comme ceci:

http://localhost:53398/signalr/hubs

Et voir si vous obtenez le fichier javascript ou non. Sinon je vous suggère de commencer un autre projet (si c'est un test).

+0

Il est le même qu'avant (souligné en rouge) et en vol stationnaire il indique: 'SignalRRouteExtensions.MapHubs (RouteCollection)' est obsolète: 'Utilisez IAppBuilder.MapSignalR dans une classe de démarrage owin.' –

+0

en utilisant Microsoft.AspNet.SignalR; en utilisant Microsoft.AspNet.SignalR.Hubs; J'ai fait référence à ceux de la classe hub, ce qui, je crois, est suffisant. –

0

Je ne sais pas pourquoi, mais cela a finalement fonctionné pour moi. Je viens d'entourer les balises de script avec @section scripts:

@section scripts{ 
    <script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script> 

<script src="~/signalr/hubs"></script> 
<script> 
     $(function() { 
      var myHub = $.connection.counterHub; 
      $.connection.hub.start().done(function() { 

      }); 
      myHub.client.UpdateCount = function (count) { 
       $("#counter").text(count); 
      } 
     }); 

</script> 
    }