Azure服务总线,在核心转换中反序列化消息已损坏

问题描述 投票:0回答:1

因此,我创建了一个新的Azure Functions项目v3,并移植了v1中运行在4.6.2上的部分功能,同时将其余功能淘汰了。不幸的是,由于从Microsoft.ServiceBus.Messaging更改为Microsoft.Azure.ServiceBus,从BrokeredMessage更改为Message,以下反序列化方法现在失败:

反序列化类型为stream的对象时发生错误。输入源的格式不正确。

问题出在错误中,但是我不确定什么是正确的新方法,还不清楚。

序列化

public static Message CreateBrokeredMessage(object messageObject)
{

       var message = new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messageObject)))
       {
           ContentType = "application/json",
           Label = messageObject.GetType().Name

       };

       return message;
}

反序列化

public static T ParseBrokeredMessage<T>(Message msg)
{
     var body = msg.GetBody<Stream>();
     var jsonContent = new StreamReader(body, true).ReadToEnd();
     T updateMessage = JsonConvert.DeserializeObject<T>(jsonContent);

     return updateMessage;
}

Object

                   var fileuploadmessage = new PlanFileUploadMessage()
                    {
                        PlanId = file.Plan_Id.Value,
                        UploadedAt = uploadTimeStamp,
                        UploadedBy = uploadUser,
                        FileHash = uploadedFileName,
                        FileName = file.Name,
                        BusinessUnitName = businessUnitName,
                        UploadedFileId = uploadedFile.Id
                    };
    ```
serialization azure-storage message azureservicebus brokeredmessage
1个回答
0
投票

Message.GetBody<T>()是使用旧版Service Bus SDK(WindowsAzure.ServiceBus程序包)发送的消息的扩展方法,其中,BrokeredMessage填充了Stream以外的任何内容。如果您的发件人发送了一个字节数组,如图所示,则应使用Message.Body属性对其进行访问。

如果您的消息以BrokeredMessage的形式发送,则接收代码将需要根据一些信息来选择两种方法中的任何一种,以指示消息最初是如何发送的。

© www.soinside.com 2019 - 2024. All rights reserved.