You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SignalR上游触发时无法向连接用户发消息及组消息发送疑问

问题解决:客户端无法接收SignalR connected事件及组消息发送方法

一、修复客户端接收不到onConnected事件的问题

1. 调整服务端消息发送方式(推荐)

在.NET 6 dotnet-isolated模式下,直接返回MyMessage可能存在消息定向不明确的问题,建议改用IAsyncCollector<SignalRMessage>明确指定发送目标连接:

[Function("OnConnected")]
public async Task OnConnectedAsync(
    [SignalRTrigger(HubName, "connections", "connected")] SignalRInvocationContext invocationContext,
    [SignalROutput(HubName = HubName)] IAsyncCollector<SignalRMessage> signalRMessages)
{
    _logger?.LogInformation("Connection established: {@InvocationContext}", invocationContext);
    string someMessage = await DoSomethingAsync();
    
    // 明确将消息发送到刚建立连接的客户端
    await signalRMessages.AddAsync(new SignalRMessage
    {
        Target = "onConnected",
        Arguments = new[] { new { message = someMessage } },
        ConnectionId = invocationContext.ConnectionId
    });
}

2. 简化客户端订阅逻辑

客户端无需手动反序列化,SignalR会自动处理对象转换,调整订阅代码:

connection.On<dynamic>("onConnected", message =>
{
    // 直接访问消息属性
    Console.WriteLine($"Received message: {message.message}");
});

3. 确认MyMessage类定义(若仍使用返回值方式)

如果坚持使用返回MyMessage的方式,确保类结构与SignalR要求一致:

public class MyMessage
{
    public string Target { get; set; }
    public object[] Arguments { get; set; }
}

二、向用户组发送消息的步骤

1. 将客户端连接加入目标组

在连接建立时(如OnConnected函数中),通过SignalRGroupAction将连接加入指定组:

// 在OnConnectedAsync函数中添加以下代码
await signalRMessages.AddAsync(new SignalRGroupAction
{
    Action = GroupAction.Add,
    GroupName = "YourGroupName", // 替换为实际组名
    ConnectionId = invocationContext.ConnectionId
});

2. 发送消息到指定组

在任意函数中,通过SignalRMessage指定GroupName即可发送组消息:

[Function("SendGroupMessage")]
public async Task SendGroupMessage(
    [TimerTrigger("*/30 * * * * *")] TimerInfo timer,
    [SignalROutput(HubName = HubName)] IAsyncCollector<SignalRMessage> signalRMessages)
{
    await signalRMessages.AddAsync(new SignalRMessage
    {
        Target = "groupNotification", // 客户端需订阅此目标名
        Arguments = new[] { "New group notification!" },
        GroupName = "YourGroupName"
    });
}

3. 客户端订阅组消息事件

客户端添加对应订阅:

connection.On<string>("groupNotification", notification =>
{
    Console.WriteLine($"Group notification: {notification}");
});

内容的提问来源于stack exchange,提问作者Arash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:40:55