ASP.NET Core SignalR 与 ASP.NET SignalR的客户端或服务器不兼容。 本文详细介绍了 ASP.NET Core SignalR中已删除或更改的功能。
ASP.NET SignalR | ASP.NET Core SignalR | |
---|---|---|
服务器 NuGet 包 | SignalR | 无。 包含在AspNetCore共享框架中。 |
客户端 NuGet 包 | SignalR。机 SignalR。JS |
AspNetCore.SignalR。机 |
JavaScript 客户端 npm 包 | signalr | @microsoft/signalr |
Java 客户端 | GitHub 存储库(已弃用) | Maven 包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 包 | SignalR | Microsoft.AspNetCore.App (.NET Core) AspNetCore。SignalR (.NET Framework) |
客户端 NuGet 包 | SignalR。机 SignalR。JS |
AspNetCore.SignalR。机 |
JavaScript 客户端 npm 包 | signalr | @aspnet/signalr |
Java 客户端 | GitHub 存储库(已弃用) | Maven 包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:
在 ASP.NET Core SignalR:
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 SignalR中,SignalR 在断开连接时尝试重新连接到服务器。
ASP.NET Core SignalR 支持 JSON,以及基于MessagePack的新二进制协议。 此外,还可创建自定义协议。
ASP.NET Core SignalR不支持永久帧传输。
ASP.NET Core SignalR 服务器端库包含在AspNetCore中,该应用程序用于 RAZOR 和 MVC 项目的ASP.NET Core Web 应用程序模板。
ASP.NET Core SignalR 是 ASP.NET Core 中间件。 必须通过在 Startup.ConfigureServices
中调用 AddSignalR 来配置它。
services.AddSignalR()
若要配置路由,请将路由映射到 Startup.Configure
方法中 UseEndpoints 方法调用内的中心。
app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapHub<ChatHub>("/hub"); });
若要配置路由,请将路由映射到 Startup.Configure
方法中 UseSignalR 方法调用内的中心。
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
),并支持进度消息。 目前没有中心代理的对应项。
在 ASP.NET Core SignalR中,已删除PersistentConnection类。
ASP.NET Core 在框架中内置了依赖关系注入 (DI)。 服务可以使用 DI 来访问 HubContext。 在 ASP.NET SignalR 中用于获取 HubContext
的 GlobalHost
对象在 ASP.NET Core SignalR中不存在。
ASP.NET Core SignalR 不支持 HubPipeline
模块。
SignalR 客户端 ASP.NET Core 是以TypeScript编写的。 使用 JavaScript 客户端时,可以以 JavaScript 或 TypeScript 编写。
在 ASP.NET 版本中,JavaScript 客户端通过 Visual Studio 中的 NuGet 包获得。 在 ASP.NET Core 版本中, @microsoft/signalr
npm 包包含 JavaScript 库。 此包不包括在ASP.NET Core Web 应用程序模板。 使用 npm 获取并安装 @microsoft/signalr
npm 包。
npm init -y npm install @microsoft/signalr
在 ASP.NET 版本中,JavaScript 客户端通过 Visual Studio 中的 NuGet 包获得。 在 ASP.NET Core 版本中, @aspnet/signalr
npm 包包含 JavaScript 库。 此包不包括在ASP.NET Core Web 应用程序模板。 使用 npm 获取并安装 @aspnet/signalr
npm 包。
npm init -y npm install @aspnet/signalr
已删除对 jQuery 的依赖关系,但项目仍然可以使用 jQuery。
ASP.NET Core SignalR 需要 Microsoft Internet Explorer 11 或更高版本(ASP.NET SignalR 支持的 Microsoft Internet Explorer 8 及更高版本)。
JavaScript 语法已在 SignalR的 ASP.NET 版本中发生了更改。 请使用 HubConnectionBuilder API 而非 $connection
对象创建连接。
const connection = new signalR.HubConnectionBuilder() .withUrl("/hub") .build();
使用 on 方法指定可供中心调用的客户端方法。
JavaScript 语法已在 SignalR的 ASP.NET 版本中发生了更改。 请使用 HubConnectionBuilder API 而非 $connection
对象创建连接。
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));
中心代理不再自动生成。 相反,方法名称将以字符串形式传递到 invoke API。
中心代理不再自动生成。 相反,方法名称将以字符串形式传递到 invoke API。
AspNetCore.SignalR。客户端NuGet 包包含用于 ASP.NET Core SignalR的 .net 客户端库。
使用 HubConnectionBuilder 创建和生成与集线器的连接的实例。
connection = new HubConnectionBuilder() .WithUrl("url") .Build();
ASP.NET SignalR 支持 SQL Server 和 Redis。 ASP.NET Core SignalR 支持 Azure SignalR 服务和 Redis。