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. идет еще более подробно.