Я проверяю новый ретранслятор SignalR (server): https://github.com/aspnet/SignalR и задаюсь вопросом, есть ли новый/будущий формат протокола? Я хотел создать образец клиента, работающего на переносимой платформе .NET (например, netcoreapp1.0). Существует пример клиента и сервера (образец чата), но он не может заставить его работать. Он подключается к серверу, но генерирует исключение, когда я пытаюсь отправить сообщение (не очень полезно «System.ArgumentNullException: значение не может быть пустым».)Как создать портативный клиент SignalR, совместимый с «новым» сигнальным протоколом (Microsoft.AspNetCore.SignalR 1.0.0- *)?
Итак, я проверил источник и обнаружил, новый формат сообщения. Раньше это было так:
{"H": "MyHub", "M": "MyHubMethod", "A": ["This is one input argument"], "I": "0"}
Предполагая, что сервер является установка так:
app.UseSignalR(routes => routes.MapHub<MyHub>("/myhub"));
клиент устанавливается с помощью WebSocket клиента (от System.Net.WebSockets.Client
версии 4.3.0 пакета)
var ws = new ClientWebSocket();
await ws.ConnectAsync(new Uri("ws://myhost:port/myhub/ws"), CancellationToken.None);
Формат нового сообщения:
{
"Method": "MyCompany.MyNameSpace.MyHub.MyHubMethod",
"Arguments": ["This is one input argument"],
"Id": "0"
}
Точность: "Method"
, "Arguments"
и "Id"
больше не укорачиваются, а концентратор объединяется в "Method"
.
Другие части протокола (переговоры, управление соединением, пинг и т. Д.) По-прежнему неопределенны для меня. Может ли кто-нибудь показать некоторые документы?
Не забудьте добавить сервер Nuget для зависимостей ASP.NET Core dev: 'https: // dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json' – balazska
Просмотр источников и образцов позволил мне понять, что два разных конечных точки будут поддерживается: концентраторы и сокеты – balazska
Начиная с более новой версии (2017. январь), метод «" - это просто имя метода, не нужно добавлять имя пространства + имя класса. Это уже очевидно из пути, поскольку один хаб отображается на один путь – balazska