signalR asp.net 设置用户名和连接 ID

signalR asp.net set username and connectionID

我是 signalR 的新手(和 JQuery :D).....我想设置一些用户名并将其映射到 connectionId...检查一些样本后这是我的 code.how 曾经它不起作用.....页面是 运行 没有错误但是 div id="msg" 保持不变。

现在我只想在客户端页面上写下用户名和连接 ID 的列表。

服务器

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]);

        }
    }
}

客户

<%@ 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>

提前致谢......................:)

问题出在集线器名称上。如果您不设置集线器名称,它将使用名称 xZHUB.

生成

所以你可以做两件事:

使用默认名称:

var con = $.connection.xZHUB;

或更改集线器名称

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

您还需要检查其他事项:

集线器不是静态的,因此 ulist 将在每次调用时重新创建。您应该考虑将其设为静态或更改该逻辑。

"SUB" 按钮会变成 post,所以它不起作用。我用普通按钮替换了它:

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