SignalR Hub集成MessagePack协议时调用Chat方法出现参数绑定错误的解决方案咨询
SignalR Hub集成MessagePack协议时调用Chat方法出现参数绑定错误的解决方案咨询
我最近碰到个棘手的问题,想请大家帮忙看看:当我尝试调用SignalR Hub里的Chat方法时,总会弹出这个错误:
Error: Failed to invoke 'Chat' due to an error on the server. InvalidDataException: Error binding arguments. Make sure that the types of the provided values match the types of the hub method being invoked.
但奇怪的是,如果我把JS调用里的.withHubProtocol(new signalR.protocols.msgpack.MessagePackHubProtocol())这行代码删掉,用默认的JSON协议,调用就完全正常,一点问题都没有。
下面是我用到的相关代码:
模型类代码
[MessagePackObject] public class AiChatRequestViewModel { public AiChatRequestViewModel(){} [Key(0)] public int UserId { get; set; } [Key(1)] public string UserPrompt { get; set; } [Key(2)] public int Samples { get; set; } = 4000; [Key(3)] public string DocumentText { get; set; } [Key(4)] public decimal Temperature { get; set; } = 0.0m; [Key(5)] public List<AiChatMessage> PreviousMessages { get; set; } = new List<AiChatMessage>(); [IgnoreMember] public string AIPrompt => $@"Human: ..."; }
我自己也琢磨了几个可能的方向,但还没解决:
- 是不是
AiChatMessage类没配置MessagePack的序列化特性?毕竟模型里包含这个列表,如果它没加[MessagePackObject]和[Key]标记,会不会导致反序列化失败? - 前端传递的参数顺序、类型和后端模型的Key对应关系有没有问题?毕竟MessagePack是靠Key顺序来序列化的,不像JSON看字段名,会不会顺序错了或者类型不匹配?
- 服务端有没有正确配置MessagePack支持?比如我是不是漏了在AddSignalR的时候加
.AddMessagePackProtocol()的配置? - 前后端的MessagePack库版本会不会不兼容?比如前端用的msgpack库和后端的MessagePack NuGet包版本差太多?
- 那个
Temperature是decimal类型,MessagePack对这个类型的处理有没有什么特殊要求?会不会需要自定义序列化器?
有没有大佬碰到过类似的问题,给我指个方向?
备注:内容来源于stack exchange,提问作者geoff swartz
相关产品推荐
相关产品推荐

