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>
我是 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>