Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure服务总线,包含具有抽象正文的消息_C#_Azureservicebus_Azure Sdk .net - Fatal编程技术网

C# Azure服务总线,包含具有抽象正文的消息

C# Azure服务总线,包含具有抽象正文的消息,c#,azureservicebus,azure-sdk-.net,C#,Azureservicebus,Azure Sdk .net,我正在使用Azure主题和订阅作为消息总线。但是当我执行message.GetBody()时,我遇到了一个序列化异常。我想要实现的是,有一个订阅服务器读取BaseEvent类型的所有事件,并且每个事件都有自己的订阅服务器。但是当我尝试序列化主体(BaseEvent)时,它失败了。那么,如何序列化主体以获取UserEvent和TeamEvent呢?我的代码如下所示: public abstract class BaseEvent { public long ActivityId { get

我正在使用Azure主题和订阅作为消息总线。但是当我执行message.GetBody()时,我遇到了一个序列化异常。我想要实现的是,有一个订阅服务器读取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();
}
我将它们添加到消息总线中,如下所示:

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();
}
当我在车上看书时,我喜欢这样:

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();
}
代理消息;
while((message=client.Receive(new TimeSpan(0,0,5)))!=null)
{
models.Add(message.GetBody());//此操作失败SerlizationException
message.Complete();
}
作为声明:

public BrokeredMessage(
    Object serializableObject
)

它使用带有二进制XmlDictionaryWriter的DataContractSerializer从给定对象初始化BrokeredMessage类的新实例。因此,类BaseEvent必须支持DataContractSerializer。至于怎么做,请参考

我已经试过了,但还是出现了同样的错误。并将KnownType属性添加到BaseEvent。