Разница SignalR между On и подпиской IHubProxy

Каковы различия между методами On и Subscribe, доступными в интерфейсе IHubProxy. Когда нужно использовать один над другим

Ответы

Ответ 1

Подпишитесь на более низкий уровень, и вам никогда не придется его использовать. On обеспечивает более дружественные перегрузки, которые допускают сильную типизацию аргументов. Вот пример:

Сервер

public class MyHub
{
    public void Send(string message, int age)
    {
        Clients.All.send(message, age);
    }
}

Client

Подписаться шаблон

public void Main()
{
    var connection = new HubConnection("http://myserver");
    var proxy = connection.CreateHubProxy("MyHub");

    var subscription = proxy.Subscribe("send");
    subscription.Received += arguments =>
    {
        string name = null;
        int age;
        if (arguments.Count > 0)
        {
            name = arguments[0].ToObject<string>();
        }

        if (arguments.Count > 1)
        {
            age = arguments[1].ToObject<int>();
        }

        Console.WriteLine("Name {0} and age {1}", name, age);
    };
}

"On" Шаблон

public void Main()
{
    var connection = new HubConnection("http://myserver");
    var proxy = connection.CreateHubProxy("MyHub");

    proxy.On<string, int>("send", (name, age) =>
    {
        Console.WriteLine("Name {0} and age {1}", name, age);
    });
}

Ответ 2

Я ненавижу некро, но эта нить привела меня немного в темный переулок. Фактически можно использовать Reactive Extensions (Rx) для обработки подписки, и во многих случаях это предпочтительнее, поскольку позволяет создавать композиции.

Достаточно приличная статья, объясняющая основы. Форматирование, к сожалению, немного испорчено в примерах кода, но вы можете добраться туда. https://www.safaribooksonline.com/blog/2014/02/10/signalr-rx-framework/