我正在实现一个基于SignalR的系统,它将推动客户端事件,对于消息序列化,我希望使用MessagePack。在尝试实现消息传递时,我遇到了一个问题,SignalR无法对客户机上的消息进行反序列化。
这些消息是多态的,使用Union属性描述,标准的MessagePack序列化程序在序列化和反序列化消息时没有问题,但是在信号R出现错误的情况下,它失败了。
报告的错误是System.InvalidOperationException:无效的Union数据被检测到。
在客户端序列化时,只有在使用实际类时才能工作,如果我尝试使用接口或基类,则会出现错误。
类
[DataContract()]
[MessagePackObject()]
[Union(0,typeof(EntityChangeEventMessage))]
public abstract class EntityEventMessage : IEntityEventMessage
{
}
[DataContract()]
[MessagePackObject()]
public class EntityChangeEventMessage : EntityEventMessage
{
#region PROPERTIES
/// <summary>
/// Gets entity id.
/// </summary>
[DataMember(Order = 1)]
[Key(1)]
public int EntityId
{
get; set;
}
/// <summary>
/// Gets event type.
/// </summary>
/// <remarks>
/// This value identifies database operation such as create,delete,update etc.
/// </remarks>
[DataMember(Order = 2)]
[Key(2)]
public int EventType
{
get; set;
}
/// <summary>
/// Gets entity type name.
/// </summary>
[DataMember(Order = 3)]
[Key(3)]
public string EntityType
{
get; set;
}
#endregion
}
[Union(0,typeof(EntityChangeEventMessage))]
public interface IEntityEventMessage
{
}
所以这起作用了
connection.On("EntityEvent",(EntityChangeEventMessage d) )
这不管用
connection.On("EntityEvent",(IEntityEventMessaged)
所以通常情况下,问题应该出现在Microsoft.AspNetCore.SignalR.Protocols.MessagePack库中吗?有人成功地实现了这样的功能吗?
发布于 2021-02-12 16:02:25
目前SignalR不支持MessagePack多态,更多信息这里。
https://stackoverflow.com/questions/66139055
复制相似问题