SignalR 2.1.0: соединение не установлено

У меня есть веб-приложение ASP.NET с простой HTML-страницей и некоторым JavaScript для связи через SignalR. Это прекрасно работает. Теперь я пытаюсь вызвать метод на концентраторе из другого проекта (в том же решении) и с помощью .NET Signalr Client Api:

        var connection = new HubConnection("http://localhost:32986/");
        var hub = connection.CreateHubProxy("MessageHub");
        connection.Start();
        hub.Invoke("SendMessage", "", "");

Последняя строка вызывает InvalidOperationException: The connection has not been established. Но я могу подключиться к хабу из моего кода JavaScript.

Как подключиться к концентратору с помощью кода С#?

UPDATE

В тот момент, когда я написал этот пост, я попытался добавить .Wait(), и он сработает! Итак, это будет делать:

        var connection = new HubConnection("http://localhost:32986/");
        var hub = connection.CreateHubProxy("MessageHub");
        connection.Start().Wait();
        hub.Invoke("SendMessage", "", "");

Ответ 1

HubConnection.Start возвращает Task, который необходимо выполнить, прежде чем вы сможете вызвать метод.

Два способа сделать это - использовать, если вы используете метод async, или использовать Task.Wait(), если вы используете неасинхронный метод:

public async Task StartConnection()
{
    var connection = new HubConnection("http://localhost:32986/");
    var hub = connection.CreateHubProxy("MessageHub");
    await connection.Start();
    await hub.Invoke("SendMessage", "", "");
    // ...
}

// or

public void StartConnection()
{
    var connection = new HubConnection("http://localhost:32986/");
    var hub = connection.CreateHubProxy("MessageHub");
    connection.Start().Wait();
    hub.Invoke("SendMessage", "", "").Wait();
    // ...
}

Раздел "Как установить соединение" в API-интерфейсе ASP.NET SignalR Hub для клиента .NET. идет еще более подробно.