Поделиться через


Различия между ASP.NET и ASP.NET SignalR Core SignalR

ASP.NET Core SignalR несовместимы с клиентами или серверами для ASP.NET SignalR. В этой статье описаны функции, которые были удалены или изменены в ASP.NET Core SignalR.

Как определить версию SignalR

ASP.NET SignalR ASP.NET Core SignalR
Пакет NuGet сервера Microsoft.AspNet.SignalR Нет. Включена в общую платформу Microsoft.AspNetCore.App .
Пакеты NuGet клиента Microsoft.AspNet.SignalR. Клиент
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR. Клиент
Пакет npm клиента JavaScript signalr @microsoft/signalr
Клиент на Java Репозиторий GitHub (не рекомендуется) Пакет Maven com.microsoft.signalr
Тип приложения сервера ASP.NET (System.Web) или самостоятельное размещение OWIN ASP.NET Core
Поддерживаемые серверные платформы платформа .NET Framework 4.5 или более поздней версии .NET Core 3.0 или более поздней версии
ASP.NET SignalR ASP.NET Core SignalR
Пакет NuGet сервера Microsoft.AspNet.SignalR Microsoft.AspNetCore.App (.NET Core)
Microsoft.AspNetCore.SignalR (платформа .NET Framework)
Пакеты NuGet клиента Microsoft.AspNet.SignalR. Клиент
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR. Клиент
Пакет npm клиента JavaScript signalr @aspnet/signalr
Клиент на Java Репозиторий GitHub (не рекомендуется) Пакет Maven com.microsoft.signalr
Тип приложения сервера ASP.NET (System.Web) или самостоятельное размещение OWIN ASP.NET Core
Поддерживаемые серверные платформы платформа .NET Framework 4.5 или более поздней версии .NET Framework 4.6.1 или более поздней версии
.NET Core 2.1 или более поздней версии

Отличия функций

Автоматическое повторное подключение

В ASP.NET SignalR:

  • По умолчанию пытается повторно подключиться к серверу, SignalR если подключение удалено.

В ASP.NET Core SignalR:

  • Автоматическое повторное подключение поддерживается как клиентом .NET, так и клиентом JavaScript:
HubConnection connection = new HubConnectionBuilder()
    .WithUrl(new Uri("http://127.0.0.1:5000/chathub"))
    .WithAutomaticReconnect()
    .Build();
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .withAutomaticReconnect()
    .build();

До ASP.NET Core 3.0 SignalR не поддерживает автоматическое повторное подключение. Если клиент отключен, пользователь должен явно запустить новое подключение для повторного подключения. В ASP.NET SignalRSignalR пытается повторно подключиться к серверу, если подключение удалено.

Поддержка протоколов

ASP.NET Core SignalR поддерживает JSON, а также новый двоичный протокол на основе MessagePack. Кроме того, можно создать пользовательские протоколы.

Транспорты

Транспорт Forever Frame не поддерживается в ASP.NET Core SignalR.

Различия на сервере

Библиотеки на стороне сервера ASP.NET включены SignalR в Microsoft.AspNetCore.App, которые используются в шаблоне веб-приложения ASP.NET Core для Razor обоих проектов и проектов MVC.

ASP.NET Core SignalR — это ПО промежуточного слоя ASP.NET Core. Его необходимо настроить путем вызова AddSignalR Startup.ConfigureServices.

services.AddSignalR()

Чтобы настроить маршрутизацию, сопоставить маршруты с концентраторами внутри UseEndpoints вызова метода в методе Startup.Configure .

app.UseRouting();

app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<ChatHub>("/hub");
});

Чтобы настроить маршрутизацию, сопоставить маршруты с концентраторами внутри UseSignalR вызова метода в методе Startup.Configure .

app.UseSignalR(routes =>
{
    routes.MapHub<ChatHub>("/hub");
});

Липкие сеансы

Модель масштабирования для ASP.NET SignalR позволяет клиентам повторно подключаться и отправлять сообщения на любой сервер в ферме. В ASP.NET Core SignalRклиент должен взаимодействовать с тем же сервером в течение срока подключения. Для масштабирования с помощью Redis это означает, что требуются липкие сеансы. Для масштабирования с помощью службы Azure SignalR не требуются липкие сеансы, так как служба обрабатывает подключения к клиентам.

Один концентратор на подключение

В ASP.NET Core SignalRмодель подключения была упрощена. Подключения выполняются непосредственно к одному концентратору, а не к одному подключению, используемому для совместного доступа к нескольким концентраторам.

Потоковая передача

ASP.NET Core SignalR теперь поддерживает потоковую передачу данных из концентратора в клиент.

Штат

Возможность передачи произвольного состояния между клиентами и концентратором (часто вызываемая HubState) была удалена, а также поддержка сообщений о ходе выполнения. На данный момент нет аналога прокси-серверов концентратора.

Удаление PersistentConnection

В ASP.NET Core SignalRкласс PersistentConnection удален.

GlobalHost

ASP.NET Core имеет внедрение зависимостей (DI), встроенное в платформу. Службы могут использовать di для доступа к HubContext. ОбъектGlobalHost, используемый в ASP.NET для получения HubContext не существует в ASP.NET SignalR CoreSignalR.

HubPipeline

ASP.NET Core SignalR не поддерживает HubPipeline модули.

Различия в клиенте

TypeScript

Клиент ASP.NET Core SignalR написан в TypeScript. Вы можете написать в JavaScript или TypeScript при использовании клиента JavaScript.

Клиент JavaScript размещен в npm

В ASP.NET версиях клиент JavaScript был получен через пакет NuGet в Visual Studio. В версиях @microsoft/signalr ASP.NET Core пакет npm содержит библиотеки JavaScript. Этот пакет не включен в шаблон веб-приложения ASP.NET Core. Используйте npm для получения и установки @microsoft/signalr пакета npm.

npm init -y
npm install @microsoft/signalr

В ASP.NET версиях клиент JavaScript был получен через пакет NuGet в Visual Studio. В версиях @aspnet/signalr ASP.NET Core пакет npm содержит библиотеки JavaScript. Этот пакет не включен в шаблон веб-приложения ASP.NET Core. Используйте npm для получения и установки @aspnet/signalr пакета npm.

npm init -y
npm install @aspnet/signalr

jQuery;

Зависимость от jQuery удалена, однако проекты по-прежнему могут использовать jQuery.

Поддержка Internet Explorer

ASP.NET Core SignalR не поддерживает Microsoft Internet Explorer, а ASP.NET SignalR поддерживает Microsoft Internet Explorer 8 или более поздней версии. Дополнительные сведения см. на поддерживаемых платформах ASP.NET CoreSignalR.

Синтаксис клиентского метода JavaScript

Синтаксис JavaScript изменился с ASP.NET версии SignalR. Вместо использования $connection объекта создайте подключение с помощью API HubConnectionBuilder .

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/hub")
    .build();

Используйте метод on, чтобы указать клиентские методы, которые концентратор может вызывать.

Синтаксис JavaScript изменился с ASP.NET версии SignalR. Вместо использования $connection объекта создайте подключение с помощью API HubConnectionBuilder .

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/hub")
    .build();

Используйте метод on, чтобы указать клиентские методы, которые концентратор может вызывать.

connection.on("ReceiveMessage", (user, message) => {
    const msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    const encodedMsg = `${user} says ${msg}`;
    console.log(encodedMsg);
});

После создания клиентского метода запустите подключение к концентратору. Цепочка метода catch для регистрации или обработки ошибок.

connection.start().catch(err => console.error(err));

Прокси-серверы центра

Прокси-серверы концентратора больше не создаются автоматически. Вместо этого имя метода передается в API вызова в виде строки.

Прокси-серверы концентратора больше не создаются автоматически. Вместо этого имя метода передается в API вызова в виде строки.

.NET и другие клиенты

Microsoft.AspNetCore .SignalR. Пакет NuGet клиента содержит клиентские библиотеки .NET для ASP.NET Core SignalR.

HubConnectionBuilder Создайте и создайте экземпляр подключения к концентратору.

connection = new HubConnectionBuilder()
    .WithUrl("url")
    .Build();

Различия в масштабировании

SignalR ASP.NET поддерживает SQL Server и Redis. ASP.NET Core SignalR поддерживает службу Azure SignalR и Redis.

ASP.NET

ASP.NET Core

Дополнительные ресурсы