2017-06-04 1 views
1

je suis nouveau dans signalR (et JQuery: D) ..... je veux définir quelques noms d'utilisateur et le mapper à connectionId ... après avoir vérifié quelques échantillons c'est mon code. cependant, cela ne fonctionne pas ..... la page fonctionne sans erreur mais le div id = "msg" reste inchangé. Pour l'instant, tout ce que je veux, c'est d'écrire la liste des noms d'utilisateurs et de connectionids sur la page du client.signalR asp.net set nom d'utilisateur et connectionID

SERVEUR

namespace SERVXZ 
{ 
    class UserConn 
    { 
     public string Usrname { set; get; } 
     public string ConnectionID { set; get; } 
    } 

    public class XZHUB : Hub 
    { 
     //public static ConcurrentDictionary<string, string> MyUsers = new ConcurrentDictionary<string, string>(); 
     List<UserConn> ulist = new List<UserConn>(); 
     public override Task OnConnected() 
     { 
      var us = new UserConn(); 
      us.Usrname = Context.QueryString["username"]; 
      us.ConnectionID = Context.ConnectionId; 
      ulist.Add(us); 

      // var username = Context.QueryString["username"]; 
      // MyUsers.TryAdd(Context.ConnectionId,username); 


      return base.OnConnected(); 
     } 

     public void Send() 
     { 
      Clients.All.broadcastMessage(ulist[0]); 

     } 
    } 
} 

CLIENT

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Main.aspx.cs" Inherits="SERVXZ.Main" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <asp:Label ID="USR" runat="server" Text="UserName"></asp:Label> 

      <br /> 
      <asp:Button ID="SUB" runat="server" OnClick="SUB_Click" Text="Submit" /> 

      <div id="msg">HERE</div> 

      <script src="Scripts/jquery-3.1.1.js"></script> 

      <script src="Scripts/jquery.signalR-2.2.2.js"></script> 

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

      <script type="text/javascript"> 

       $(function() { 
        var con = $.connection.XZHUB; 
        $('#msg').text("test"); 
        $.connection.hub.qs = { 'username': 'rooz' }; 

        con.client.broadcastMessage = function (msg) { 
         var enmsg = $('<dive />').text(msg).html(); 
         $('#msg').append('<div>'+enmsg+'</div>'); 
        }; 


        $.connection.hub.start().done(function() { 
         $('#SUB').click(function() { 
          con.server.send(); 
         }); 
        }); 

       }); 

      </script> 

     </div> 
    </form> 
</body> 
</html> 

Merci d'avance :) .......................

+0

Pourriez-vous ouvrir les outils de développement dans votre navigateur? Je parie que vous obtenez des erreurs javascript – hardkoded

+0

Je vous recommande également d'ajouter un nom de hub à votre hub, quelque chose comme '[HubName (" XZHUB ")]' – hardkoded

+0

TypeError Uncaught: Impossible de lire la propriété 'client' de non défini à HTMLDocument . (Main.aspx: 35) à mightThrow (jquery-3.1.1.js: 3570) au processus (jquery-3.1.1.js: 3638) –

Répondre

1

Le problème est le nom du concentrateur. Si vous ne définissez pas le nom du concentrateur, il sera généré avec le nom xZHUB.

Vous pouvez faire 2 choses:

Utilisez le nom par défaut:

var con = $.connection.xZHUB; 

Ou changer le nom du centre

[HubName("XZHUB")] 
public class XZHUB : Hub 

Il y a aussi une autre choses que vous devez vérifier:

Les concentrateurs ne sont pas statiques, donc ulist sera recréé dans ea appel ch. Vous devriez envisager de le rendre statique ou de changer cette logique.

Le bouton "SUB" fera un post pour que cela ne fonctionne pas. Je l'ai remplacé par un bouton normal:

<button ID="SUB">Submit</button>