从SignalR调用特定的客户端

我想从服务器调用特定的客户端,而不是广播给他们。 问题是,我在一些AJAX请求的范围(在.aspx代码隐藏让说),而不是在Hub或PersistentConnection,所以没有客户端属性 – 和客户谁使Ajax(jQuery)的调用不是客户端我想发送信号消息!

现在,我有一个集线器,它被称为JS页面加载,注册新的客户端到服务器静态列表,所以我有客户端GUID。 但不知道如何使用它从服务器发送消息到特定的客户端。

$('#sendmessage').click(function () { // Call the Send method on the hub. chat.server.send($('#displayname').val(), $('#message').val(), $.connection.hub.id); // Clear text box and reset focus for next comment. $('#message').val('').focus(); }); 

在服务器端发送客户端的ID和对该ID的响应

  public void Send ( string name , string message , string connID ) { Clients.Client(connID).broadcastMessage(name , message); } 

每次向中心服务器发送一个请求时,你的请求都会有一个不同的连接标识,所以我添加了一个静态散列表,其中包含一个用户名,这个用户名不是连续变化的,每次都有一个连接id你连接,连接ID将被更新

  $.connection.hub.start().done(function () { chat.server.registerConId($('#displayname').val()); }); 

并在服务器代码中:

 public class ChatHub : Hub { private static Hashtable htUsers_ConIds = new Hashtable(20); public void registerConId(string userID) { if(htUsers_ConIds.ContainsKey(userID)) htUsers_ConIds[userID] = Context.ConnectionId; else htUsers_ConIds.Add(userID, Context.ConnectionId); } } 

如果特定用户实际上是自己的主叫方,则可以使用:

 Clients.Caller.myJavaScriptClientFunction(); 

当你想发送一个消息到特定的ID

  Clients.Client(Context.ConnectionId).onMessage( new Message{From = e.Message.From, Body = e.Message.Body} );