首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SignalR MessagePack多态性

SignalR MessagePack多态性
EN

Stack Overflow用户
提问于 2021-02-10 14:41:04
回答 1查看 578关注 0票数 0

我正在实现一个基于SignalR的系统,它将推动客户端事件,对于消息序列化,我希望使用MessagePack。在尝试实现消息传递时,我遇到了一个问题,SignalR无法对客户机上的消息进行反序列化。

这些消息是多态的,使用Union属性描述,标准的MessagePack序列化程序在序列化和反序列化消息时没有问题,但是在信号R出现错误的情况下,它失败了。

报告的错误是System.InvalidOperationException:无效的Union数据被检测到。

在客户端序列化时,只有在使用实际类时才能工作,如果我尝试使用接口或基类,则会出现错误。

代码语言:javascript
运行
复制
[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库中吗?有人成功地实现了这样的功能吗?

EN

回答 1

Stack Overflow用户

发布于 2021-02-12 16:02:25

目前SignalR不支持MessagePack多态,更多信息这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66139055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档