Получение правильного синтаксиса для сервера SignalR для вызова клиента
Я собираю очень простое приложение типа "привет мир" с SignalR, с небольшим предупреждением о том, что оно само размещается, что вводит дополнительную морщину или два. По сути, я пытаюсь найти правильный способ вызова методов на моем клиенте (ах) с сервера.
На моем клиенте, например, у меня есть метод, который выглядит следующим образом:
roomHub.onEcho = function (msg) {
console.log("onEcho called: " + msg);
};
И я могу успешно вызвать его из моего серверного концентратора следующим образом:
public class RoomHub : Hub
{
public void Echo(string echo)
{
Clients.onEcho(echo);
}
}
И это работает, но, конечно, он звонит всем клиентам, а не только одному. И в различных примерах, которые я видел в Интернете (например, https://github.com/SignalR/SignalR/blob/master/samples/Microsoft.AspNet.SignalR.Hosting.AspNet.Samples/Hubs/Benchmark/HubBench.cs Я вижу все виды команд, которые делают его похожим на то, что я должен быть в состоянии указать, кого вызывать, например:
public void Echo(string echo)
{
Clients.Caller.onEcho(echo);
Clients.Caller(Context.ConnectionId).onEcho(echo);
Clients.All.onEcho(echo);
}
Но я не могу заставить работать любой из вышеперечисленных синтаксисов. За Clients.All.onEcho()
а также Clients.Caller.onEcho()
абсолютно ничего не происходит. За Clients.Caller(Context.ConnectionId).onEcho()
Firebug говорит мне, что на самом деле пытается вызвать Caller()
метод в моем экземпляре JavaScript roomHub, которого, конечно, нет.
Вот странный момент, хотя. Если я посмотрю на класс Hub, я пойму, почему ничего из этого не работает - потому что конструктор Hub переопределяет кучу свойств своего объекта "Clients" с помощью NullClientProxies:
protected Hub()
{
Clients = new HubConnectionContext();
Clients.All = new NullClientProxy();
Clients.Others = new NullClientProxy();
Clients.Caller = new NullClientProxy();
}
Но я немного озадачен тем, почему это происходит - или почему образцы все равно работают - или каким должен быть ожидаемый подход.
Какие-нибудь мысли? Что я здесь не так делаю?
1 ответ
Недавно мы обновляли документы, поэтому вы, вероятно, видели много противоречивых данных в разных местах. Последняя версия SignalR - 1.0 alpha2 ( http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx). Вся документация была обновлена, чтобы показать новый синтаксис, поэтому, если вы используете более старую версию, пожалуйста, обновите. Проверьте вики для примеров https://github.com/SignalR/SignalR/wiki/Hubs