Различия между 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, "&").replace(/</g, "<").replace(/>/g, ">");
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
- SignalRмасштабирование с помощью Служебная шина Azure
- SignalR масштабирование с помощью Redis
- SignalR масштабирование с помощью SQL Server
ASP.NET Core
Дополнительные ресурсы
ASP.NET Core