C# Azure服务总线:从对象创建BrokeredMessage
我们正在将一个应用程序从使用MSMQ转换为Azure服务总线。我们有一个对象(消息、类型)如下所示:C# Azure服务总线:从对象创建BrokeredMessage,c#,azure,serialization,azureservicebus,C#,Azure,Serialization,Azureservicebus,我们正在将一个应用程序从使用MSMQ转换为Azure服务总线。我们有一个对象(消息、类型)如下所示: [Serializable] public class LeadSubmissionMessage { public long LeadId { get; set; } public long UserId { get; set; } public DateTime DateTime { get; set; } } [DataContract] [Serializabl
[Serializable]
public class LeadSubmissionMessage
{
public long LeadId { get; set; }
public long UserId { get; set; }
public DateTime DateTime { get; set; }
}
[DataContract]
[Serializable]
public class EventMessageDto
{
[DataMember]
public Guid EventId { get; set; }
[DataMember]
public string EventType { get; set; }
[DataMember]
public string EventData { get; set; }
}
在从该对象创建BrokeredMessage时,起初我认为它可以工作,因为它已编译并且没有抛出运行时错误,但随后服务总线中没有显示任何消息。所以当我在调试中看到它时,我意识到它实际上并没有序列化对象
BrokeredMessage brokeredMessage = new BrokeredMessage(message);
在查看时,我尝试了以下方法:
BrokeredMessage brokeredMessage = new BrokeredMessage(message, new DataContractSerializer(typeof(LeadSubmissionMessage)));
但结果是一样的
我需要做什么才能使对象真正成为提交给消息的xml字符串
编辑:
我也试过这个。同样的结果:
[DataContract]
[Serializable]
public class LeadSubmissionMessage
{
[DataMember]
public long LeadId { get; set; }
[DataMember]
public long UserId { get; set; }
[DataMember]
public DateTime DateTime { get; set; }
}
您需要使用
[DataContract]
和希望随[DataMember]
一起发送的每个属性来装饰您的消息类。我这样定义该类:
[Serializable]
public class LeadSubmissionMessage
{
public long LeadId { get; set; }
public long UserId { get; set; }
public DateTime DateTime { get; set; }
}
[DataContract]
[Serializable]
public class EventMessageDto
{
[DataMember]
public Guid EventId { get; set; }
[DataMember]
public string EventType { get; set; }
[DataMember]
public string EventData { get; set; }
}
消息将使用以下内容创建:
var message = new BrokeredMessage(eventMessageDto, new DataContractSerializer(typeof(EventMessageDto)));
我正在使用这个nuget包:WindowsAzure.ServiceBus.3.3.1请参见上面的编辑。这就是你的意思吗?我试过了,但得到了同样的结果。@CaseyCrookston是的,这就是我的意思。如果仍然无法传递消息,则问题可能出在其他地方,而不是序列化。调试器无法显示已发送消息的某些属性这一事实是意料之中的-
DeliveryCount
,并且只有在接收时才会初始化这些属性。如果你只是发送了一个字符串,而不是你的消息类-它会去什么地方吗?谢谢Daniel!时间太长了,我不记得这个问题的细节了,也不记得我是如何解决的。但我很高兴你找到了一个解决方案,并让它发挥作用,谢谢你添加了你的答案。