Azure Web PubSub使用protobuf协议通信报错:无效事件名称导致负载非法
Azure Web PubSub使用protobuf协议通信报错:无效事件名称导致负载非法
嘿,我看了你遇到的问题,这个报错的核心原因其实很明确——你发送的EventMessage没有指定必填的事件名称,Azure Web PubSub的protobuf协议要求事件名称必须是1-128字符的有效字符串,而你当前的代码里完全没设置这个字段,所以服务端判定 payload 无效,给你返回了断开连接的提示。
咱们来看代码里的具体问题:
你创建EventMessage的时候只设置了Data,但漏掉了关键的EventName字段:
UpstreamMessage dataMessage = new() { EventMessage = new UpstreamMessage.Types.EventMessage() { Data = new MessageData() { TextData = "Hello from protobuf dheeraj" } // 这里缺少了必填的EventName! } };
另外,如果你是要给指定群组发消息,还需要设置To字段明确目标群组;事件名称本身也得符合规则——只能包含字母、数字、下划线、连字符、点,不能是空字符串。
给你修改后的代码片段:
// Create and send data message UpstreamMessage dataMessage = new() { EventMessage = new UpstreamMessage.Types.EventMessage() { EventName = "custom-chat-message", // 这里必须指定有效的事件名称 To = Group, // 如果要发送到指定群组,加上这个字段 Data = new MessageData() { TextData = "Hello from protobuf dheeraj" } } };
还有个小建议:你现在用Task.Delay来等待连接建立和群组加入完成,其实更可靠的方式是监听服务端返回的JoinGroupAck消息,确认加入群组成功后再发送数据消息,避免因为网络延迟导致消息发送失败。
总结一下解决要点:
- 发送
EventMessage时必须指定EventName,绝对不能为空 - 如果是向特定群组发消息,记得设置
To字段为目标群组名称 - 尽量用服务端的确认消息替代固定延迟等待,提升代码稳定性
备注:内容来源于stack exchange,提问作者deathrace
相关产品推荐
相关产品推荐

