Abp vNext+SignalR
我的项目基于 ABP vNext (版本 8.2.0) + Blazor + SQL Server。从官网下载的模板默认不包含 SignalR,因此这里记录了如何在 ABP vNext 中集成 SignalR 实现实时通信的过程。以下是一个详细的集成步骤指南:
1. 安装所需的 NuGet 包
官方文档:https://abp.io/docs/latest/framework/real-time/signalr
在项目文件夹(.csproj 文件)中打开一个命令行窗口,然后键入以下命令:
abp add-package Volo.Abp.AspNetCore.SignalR
2. 创建 SignalR Hub
[HubRoute("/signalr-hubs/my-chat")]
public class MyChatHub : Hub { public async Task SendMessage(string user, string message) { await Clients.All.SendAsync("ReceiveMessage", user, message); } }
3. 创建前端客户端
const connection = new signalR.HubConnectionBuilder() //.withUrl("/my-chat") .withUrl("http://localhost:8011/signalr-hubs/my-chat") .build(); connection.on("ReceiveMessage", (user, message) => { console.log(user + ": " + message); }); connection.start().catch(err => console.error(err)); function sendMessage(user, message) { connection.invoke("SendMessage", user, message).catch(err => console.error(err)); }
* 前端如何需要通过WebSocket访问,可以在“XXX.XXX.Application”的XXXApplicationModule中加以下代码
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpSignalROptions>(options =>
{
options.Hubs.Add(
new HubConfig(typeof(MyChatHub),
"my-chat",
hubOptions =>
{
hubOptions.Transports = HttpTransportType.WebSockets;
}
));
});
}
* 默认是有跨域验证的,需要在appsettings.json文件中修改相关项(如果是跨域访问signalr)
{ "App": { "SelfUrl": "http://localhost:8011", "RedirectAllowedUrls": "http://localhost:8011", "CorsOrigins": "https://*.Test.com,http://localhost:30001,http://localhost:8080" }, ... }