我希望能够向特定客户端发送消息,我有工作代码,但我找不到识别用户的方法,因为在每次页面加载/刷新时,客户端 ID 都会发生变化,所以我不能依赖它。 我试图将查询字符串附加到连接,但我只能找到相同上下文的查询字符串。
这是我的集线器,在发送方法中,我希望能够在发送消息时匹配发送到特定连接 ID 的 ID:
public class Chat : Hub
{
public string addMsg()
{
return "";
}
public void Send(string message, string id)
{
Clients.Client(Context.ConnectionId).receiveMessage(message);
}
}
这是我的客户端代码,我想将发送消息的人的 ID 传递给服务器发送方法,并使用其他连接用户的查询字符串值将其与我发送的 ID 相匹配。
var chat = $.connection.chat;
chat.client.receiveMessage = function (message) {
alert("Received from server: " + message);
};
chat.addMsg = function (message) {
};
$("#sendMessage").click(function () {
chat.server.send($('#newMessage').val(), 6);
});
$.connection.hub.qs = "id=1";
$.connection.hub.start().done(function () {
var myClientId = $.connection.hub.id;
var qs = $.connection.hub.qs;
});
我希望我的问题是有道理的,我已经尝试破解这个问题有一段时间了,下面是一些链接,指向我以前用来到达现在位置的一些文章,我只是错过了最后一篇谜题,请放轻松:)
http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx
最佳答案
我认为这不会按照您希望的方式工作。连接 ID 就是一个特定连接的标识符。 SignalR 本身对用户身份验证一无所知。但是,它建立在 ASP.NET 之上,并且您熟悉的所有身份验证方法(Windows、Forms 等)都按您预期的方式工作。
一旦 ASP.NET 对用户进行了身份验证,您就可以在您的中心作为 Context.User
访问它。现在由您来维护此用户与一个或多个连接 ID 之间的映射。除了浏览器刷新之外,您可能还需要处理从多个浏览器或机器访问您的服务的用户。向该用户发送消息意味着将其发送到所有这些浏览器和机器。
Jabbr做这一切以及更多。您确实应该查看该代码以找到实现它的好方法。
关于c# - SignalR 1.0 - 向特定客户端发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13542453/