Подтвердить что ты не робот

Вызовите конкретного клиента из SignalR

Я хочу позвонить конкретному клиенту с сервера и не транслировать его всем. Проблема в том, что я вхожу в рамки некоторого запроса AJAX (в .aspx codebehind let say), а не в Hub или PersistentConnection, поэтому не имеет свойства Клиентов - и клиент, который сделал этот вызов ajax (jquery), не является клиентом Я хочу отправить сигнальное сообщение!

Теперь у меня есть один концентратор, который он вызвал на загрузку JS-страницы, которая регистрирует новый клиент в статическом списке серверов, поэтому у меня есть клиентские гиды. Но не знаю, как использовать это для отправки сообщения от сервера к конкретному клиенту.

4b9b3361

Ответ 2

$('#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

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

Ответ 3

Каждый раз, когда вы отправляете запрос на сервер-концентратор, ваш запрос будет иметь другой идентификатор соединения, поэтому я добавил статическую хеш-таблицу, содержащую имя пользователя, которое не меняется непрерывно, и идентификатор соединения для сигнала r, каждый раз, когда вы подключаетесь, идентификатор соединения будет обновляться

 $.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);
    }
}

Ответ 4

Если конкретный пользователь на самом деле является его вызывающим, вы можете использовать:

Clients.Caller.myJavaScriptClientFunction();

Ответ 5

когда вы хотите отправить сообщение определенному id

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