IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

signalR Uncaught TypeError: Cannot read property ''etathub"of undefined


Sujet :

ASP.NET MVC

  1. #1
    Membre à l'essai
    Homme Profil pro
    connaissance sur la sécurité
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : connaissance sur la sécurité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 10
    Points
    10
    Par défaut signalR Uncaught TypeError: Cannot read property ''etathub"of undefined
    bonjour tous,
    Je rencontre un souci sur lequel je bute depuis un moment.
    le but de mon code et d’afficher et faire mise a jour a mon page index.html a chaque modification dans la base de donner ,
    pour faire cela je me suis baser sur SqlDependency ,signalR.
    voici mon class qui Projet dans la base

    1. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      public class vitesseinstantaner
          {   
       
              [Key]
              [Column(Order = 0)]
              public string Idmachine { get; set; }
              [Key]
              [Column(Order = 1)]
              public DateTime time { get; set; }
              public float vitesse { get; set; }
          }


    et encore un autre Class je vais l'utiliser pour envoyer cette objet comme notification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     public class Etatmachine
        {
            public string id_machine { get; set; }
            public float vi { get; set; }
            public List<float> lastVis { get; set; }
            public  Etatmachine(string id, float vi, List<float> lastVis)
            {
                this.id_machine = id;
                this.lastVis = lastVis;
                this.vi = vi;
            }
        }
    et voici mon class Etathub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    public class EtatHub: Hub    {
            private bddContext db = new bddContext();
            public static void Show(Etatmachine etat)
            {
                IHubContext context = GlobalHost.ConnectionManager.GetHubContext<EtatHub>();
                context.Clients.All.RecieveNotification(etat);
            }
            public Etatmachine GetEtat()
            {
     
     
                List<float> L = new List<float>();
                DateTime Odate = DateTime.Now;
     
     
                string OIdmachine = "P1-13";
                DateTime dateEntrieur = Odate.AddDays(30);
                var etats = db.vitesseis.Where(a => a.Idmachine == OIdmachine)
                                        .Where(a => a.time <= Odate && dateEntrieur < a.time)
                                        .OrderBy(a => a.time);
     
     
                foreach (vitesseinstantaner reg in etats)
                {
                    L.Add(reg.vitesse);
                }
     
     
                Etatmachine etat = new Etatmachine(OIdmachine, L.Last(), L);
     
     
                using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
                {
                    connection.Open();
                    using (SqlCommand command = new SqlCommand(@"SELECT [idmachine],[time],[vitesse],
                             FROM [Bddcontext].[vitesseinstantaner] where max([time]) and  [idmachine]=='" + OIdmachine + "'", connection))
                    {
                        command.Notification = null;
                        SqlDependency dependency = new SqlDependency(command);
                        dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                        if (connection.State == ConnectionState.Closed)
                            connection.Open();
     
     
                        using (var reader = command.ExecuteReader())
                        {
                            reader.Read();
                            etat.vi = (int)reader["vi"];
                            etat.lastVis.Add(etat.vi);
                            if (etat.lastVis.Count >= 33)
                                etat.lastVis.RemoveAt(0);
     
     
                        }
                        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<EtatHub>();
                        return context.Clients.All.RecieveNotification(etat);
                       ;
                    }
                }
            }
            private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
            {
                if (e.Type == SqlNotificationType.Change)
                {
                    EtatHub nHub = new EtatHub();
                    nHub.GetEtat();
                }
            }
        }
    et voici ma vue partiel qui sera appeler dans la index.html que sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <script src="@Url.Content("~/Scripts/")jquery-1.10.2.js"></script><script src="@Url.Content("~/Scripts/")jquery.signalR-2.2.0.min.js"></script>
    <script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>
     
     
    <script type="text/javascript">
        $(function () {
     
            //creation du proxy
     
            var itat= $.connection.etatHub;
            itat.client.recieveNotification = function getData(data) {
                var $etat = $('#blockdetat');
                document.write("xxxxx")
                $etat.empty();
                $etat.append(' <div > ' + data.lastVis + '</div><div ">' + data.vi + '</div><div >' + data.id_machine + '</div>');
            }
     
            $.connection.hub.start().done(function () {
                itat.server.getEtat();
            }).fail(function (e) {
                alert(e);
            });
        });
     
     
     
    </script>
     
    <div class="row-fluid">
        <div class="span3 statbox green"  onTablet="span6" onDesktop="span3">
            <div id="blockdetat"></div>
     
     
     
            </div>
    </div>
    aussi j'ai ajouter a globl.asp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     protected void Application_Start()        {
     
     
                // call to RegisterBundles()
     
     
                //...demarge de service broker
                SqlDependency.Start(ConfigurationManager.ConnectionStrings["BddContext"].ConnectionString);
            }
     protected void Application_End()
            {
                SqlDependency.Stop(ConfigurationManager.ConnectionStrings["BddContext"].ConnectionString);
            }
    j'ai bien lu qui la documentions de signal http://www.asp.net/signalr/overview/...roubleshooting
    mais j'arrive pas a résoudre mon problème
    svp y'a quel q'un qui peut m'aides !! merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Salut,

    coomme dit sur le chat, modifie la ligne 8 de la vue en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //creation du proxy
    $.connection.url = "http://localhost:61353/signalr";
    var itat = $.connection.etatHub;
    et n'oublie pas d'ajouter les scripts relatifs a signalr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            <script src="~/lib/signalr/jquery.signalr.js"></script>
            <script src="~/signalr/hubs"></script>

  3. #3
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    il faut mentionner le HubName juste avant la class Hub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [HubName("etatHub")]
    public class EtatHub: Hub {
    [HubMethodName("getEtat")]
    public Etatmachine GetEtat(){...}
    ...
    }
    puis pour se connecter a la class EtatHub avec $.connection, on l'appelle avec le nom du HubName et pas le nom de la class, c'est a dire $.connection.etatHub.
    la même chose pour les méthodes au seins de la class, il faut mentionner le HubMethodName juste avant chaque méthode.
    j'avais aussi un problème de génération du fichier hubs.js, je l'ai chargé manuellement en tapant l'adresse http: //portdevotrelocalhost/signalr/hubs.js puis Entrer.

  4. #4
    Membre à l'essai
    Homme Profil pro
    connaissance sur la sécurité
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : connaissance sur la sécurité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 10
    Points
    10
    Par défaut
    merci a tous mon problème et résolu a l'aide mermich en faite c'est était pas un erreur signalR c'est etait le méme probléme que ici http://stackoverflow.com/questions/1...n-is-undefined
    ce qui concernée le nommage on doit utiliser sa quand on plusieurs class hérite de Hub , si non il y'a une convention de nommage les méthodes et la class doit etre nomme preimier lettre en majuscule au niveau de serveur et en niveau du code java script il seront défini tout en rendant la première lettre en minuscule comme ceci par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class MonHub :Hub
    {
    public void MethodHub()
    {
    .......
    } 
    .....
    }
    et au niveau de client

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var  obj=$.connection.monHub;
    obj.client.methodHub =function ()
    ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur : TypeError: Cannot read property 'test' of undefined
    Par deathness dans le forum AngularJS
    Réponses: 1
    Dernier message: 11/05/2016, 10h42
  2. Réponses: 3
    Dernier message: 30/05/2015, 12h08
  3. [V8] Importation csv Error Cannot read property '1' of undefined
    Par vernetk dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 11/02/2015, 16h36
  4. Réponses: 15
    Dernier message: 15/06/2013, 01h11
  5. sous Chrome TypeError: Cannot read property 'style' of null 7
    Par cfabc dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/08/2010, 12h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo