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"
    },
...
}

 

posted @ 2024-08-18 22:00  Hi.wz  阅读(86)  评论(1编辑  收藏  举报