Получение правильного синтаксиса для сервера 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

Другие вопросы по тегам