Ответ 1
Смотрите документы для последних:
Постоянные соединения - https://github.com/SignalR/SignalR/wiki/PersistentConnection
Hubs - http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server
Я хочу позвонить конкретному клиенту с сервера и не транслировать его всем. Проблема в том, что я вхожу в рамки некоторого запроса AJAX (в .aspx codebehind let say), а не в Hub или PersistentConnection, поэтому не имеет свойства Клиентов - и клиент, который сделал этот вызов ajax (jquery), не является клиентом Я хочу отправить сигнальное сообщение!
Теперь у меня есть один концентратор, который он вызвал на загрузку JS-страницы, которая регистрирует новый клиент в статическом списке серверов, поэтому у меня есть клиентские гиды. Но не знаю, как использовать это для отправки сообщения от сервера к конкретному клиенту.
Смотрите документы для последних:
Постоянные соединения - https://github.com/SignalR/SignalR/wiki/PersistentConnection
Hubs - http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server
$('#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);
}
Каждый раз, когда вы отправляете запрос на сервер-концентратор, ваш запрос будет иметь другой идентификатор соединения, поэтому я добавил статическую хеш-таблицу, содержащую имя пользователя, которое не меняется непрерывно, и идентификатор соединения для сигнала 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);
}
}
Если конкретный пользователь на самом деле является его вызывающим, вы можете использовать:
Clients.Caller.myJavaScriptClientFunction();
когда вы хотите отправить сообщение определенному id
Clients.Client(Context.ConnectionId).onMessage(
new Message{From = e.Message.From, Body = e.Message.Body}
);