繁体   English   中英

具有抽象主体消息的Azure Service Bus

[英]Azure Service Bus with message that have abstract body

我正在使用Azure主题和订阅作为消息总线。 但是当我执行message.GetBody()时 ,出现了SerializationException。 我想要实现的是拥有一个读取所有BaseEvent类型的事件的订阅者,并且每个事件都有自己的订阅者。 但是,当我尝试序列化主体(BaseEvent)时,它会失败。 那么,如何序列化主体以同时获取UserEvent和TeamEvent? 我的代码如下所示:

public abstract class BaseEvent
{
    public long ActivityId { get; set; }
}

public class UserEvent
{
    public string Name { get; set; }
}

public class TeamEvent
{
    public string Name { get; set; }
}

我将它们添加到消息总线中,如下所示:

public async Task HandleAsync(BaseEvent request)
{
     var message = new BrokeredMessage(request)
     {
         CorrelationId = request.Id.ToString()
     };

     await topicClient.SendAsync(message);
     await topicClient.CloseAsync();
}

当我要从公共汽车上阅读时,我会这样:

BrokeredMessage message;
while ((message = client.Receive(new TimeSpan(0, 0, 5))) != null)
{
    models.Add(message.GetBody<BaseEvent>()); // THIS FAILS SerlizationException
    message.Complete();
}

作为BrokeredMessage构造函数声明:

public BrokeredMessage(
    Object serializableObject
)

它通过将DataContractSerializer与二进制XmlDictionaryWriter结合使用,从给定的对象初始化BrokeredMessage类的新实例。 因此,BaseEvent类必须支持DataContractSerializer。 有关操作方法,请参阅序列化和反序列化

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM