![](/img/trans.png)
[英]Microsoft.Azure.ServiceBus.Message support for Azure Webjob Service
[英]C# Azure: How to read body from Microsoft.Azure.ServiceBus.Message?
我在使用Microsoft.Azure.ServiceBus.Message
類時遇到問題。 我想創建一個包含有效負載對象的 Message 對象,然后從中讀取該對象。 在我當前的示例中,我什至沒有通過真正的 Azure 總線發送消息; 我只是在內存中創建它,然后嘗試讀取它。
我無法弄清楚我應該將消息正文讀取為什么類型。 我試過byte[]
、 string
和原始對象類型。 在我的所有情況下,我都會收到XmlException
:“輸入源的格式不正確”。
有人可以告訴我在編碼或解碼消息時我做錯了什么嗎?
[DataContract]
public class Thingy
{
[DataMember]
public string Doodad { get; set; }
}
private static Message CreateMessage()
{
var entityMessage = new Thingy {Doodad = "foobar"};
var serializedMessageBody = JsonConvert.SerializeObject(entityMessage);
var contentType = typeof(Thingy).AssemblyQualifiedName;
var bytes = Encoding.UTF8.GetBytes(serializedMessageBody);
var message = new Message(bytes) {ContentType = contentType};
return message;
}
[Test]
public void ReadMessageBytes()
{
var message = CreateMessage();
var body = message.GetBody<byte[]>();
Console.WriteLine(body);
}
[Test]
public void ReadMessageString()
{
var message = CreateMessage();
var body = message.GetBody<string>();
Console.WriteLine(body);
}
[Test]
public void ReadMessageThingy()
{
var message = CreateMessage();
var body = message.GetBody<Thingy>();
Console.WriteLine(body);
}
我發現這有效:
[Test]
public void ReadMessageProperly()
{
var message = CreateMessage();
var body = message.Body;
var text = Encoding.UTF8.GetString(body);
var thingy = JsonConvert.DeserializeObject<Thingy>(text);
Assert.IsInstanceOf<Thingy>(thingy);
Assert.AreEqual("foobar", thingy.Doodad);
}
使用自定義DataContract
類型和DataContractSerializer
創建 BrokeredMessage 時:
Record recordDataContract = new Record { Id = "DataContract Record" };
BrokeredMessage recordDataContractMessage = new BrokeredMessage(recordDataContract, new DataContractSerializer(typeof(Record)));
您可以通過以下方式接收此消息:
Record r = receiveMessage.GetBody<Record>(new DataContractSerializer(typeof(Record)));
使用自定義**DataContract**
類型並使用默認序列化程序(DataContract + Binary Xml)創建**BrokeredMessage**
:
[DataContract(Namespace = "")]
class Record {
[DataMember]
public string Id { get; set; }
}
Record recordDefault = new Record { Id = "default Record" };
BrokeredMessage recordDefaultMessage = new BrokeredMessage(recordDefault);
您可以通過以下方式接收此消息:
Record r = receiveMessage.GetBody<Record>();
如需更多參考,您可以查看此博客。 它有針對不同場景的詳細示例。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.