REST:在没有base64编码的情况下将消息添加到azure存储队列?

时间:2016-11-11 15:45:24

标签: rest azure queue

我没有机会将我的请求编码到base64,根据我不应该提供的文档,但我无法弄清楚。

如果我对Base64编码它的工作正常:

<QueueMessage>
<MessageText>PHNhbXBsZT5zYW1wbGUgbWVzc2FnZTwvc2FtcGxlPg==</MessageText>
</QueueMessage>

将解码后的消息添加到队列中:

<sample>sample message</sample>

根据文件(https://msdn.microsoft.com/sv-se/library/azure/dd179346.aspx

  

消息必须采用可包含在XML请求中的格式   使用UTF-8编码。要在邮件中包含标记,请将内容包括在内   消息必须是XML转义或Base64编码。任何XML   将删除未转义或编码的邮件中的标记   在将消息添加到队列之前。

尝试添加(而不是PHNhbXBsZT5zYW1wbGUgbWVzc2FnZTwvc2FtcGxlPg ==):

&lt;sample&gt;sample message&lt;/sample&gt;

成功,但在尝试查看队列中的消息时,它只响应:

  

输入不是有效的Base-64字符串,因为它包含非基数64   字符,两个以上的填充字符或非法字符   在填充字符中。

有人知道如何将正确的原始xml转义请求消息发送到存储队列吗?

完整请求(没有密钥和名称):

POST https://xxxxxxx.queue.core.windows.net/testqueue/messages?sv=2015-04-05&ss=q&srt=sco&sp=a&se=2026-11-11T20:24:03Z&st=2016-11-11T12:24:03Z&spr=https&sig=xxxxxxxxxxxxxxxxx%3D HTTP/1.1
User-Agent: Fiddler
Host: XXXXX.queue.core.windows.net
Content-Type: text/plain
Content-Length: 64

<QueueMessage>
<MessageText>&lt;sample&gt;sample message&lt;/sample&gt;</MessageText>
</QueueMessage>

2 个答案:

答案 0 :(得分:2)

我收到调用AsString属性的格式错误,因为默认情况下,从存储队列返回的消息是base64编码的。

CloudQueue对象具有设置为true的EncodeMessage属性。切换到假,一切正常。这是我的代码:

 CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
 CloudQueue queue = queueClient.GetQueueReference(ClientQueueName);
 queue.EncodeMessage = false;
 CloudQueueMessage retrievedMessage = queue.GetMessage();

ClientQueueName是一个字符串,在Azure上保存我的队列名称。我想在发送之前需要将属性设置为false。

答案 1 :(得分:0)

John Donnelly answer。现在已经过时了。 CloudQueue is now considered legacy 并且您应该使用 QueueClient insteadQueueClient 没有 EncodeMessage 属性,但您可以在注入服务时指定 MessageEncoding

builder.Services.AddAzureClients(builder => {
      builder.AddQueueServiceClient(<connection string>)
         .ConfigureOptions(o => o.MessageEncoding = QueueMessageEncoding.None);
}