thl*_*brg 10 c# rest azure azure-queues
我无法将我的请求编码为 base64,根据文档,我不应该这样做,但我无法弄清楚。
如果我 Base64 编码它工作正常:
<QueueMessage>
<MessageText>PHNhbXBsZT5zYW1wbGUgbWVzc2FnZTwvc2FtcGxlPg==</MessageText>
</QueueMessage>
Run Code Online (Sandbox Code Playgroud)
将解码后的消息添加到队列中:
<sample>sample message</sample>
Run Code Online (Sandbox Code Playgroud)
根据文档(https://msdn.microsoft.com/sv-se/library/azure/dd179346.aspx)
消息的格式必须可以包含在使用 UTF-8 编码的 XML 请求中。要在消息中包含标记,消息的内容必须是 XML 转义的或 Base64 编码的。在将消息添加到队列之前,将删除消息中未转义或编码的任何 XML 标记。
尝试添加(而不是 PHNhbXBsZT5zYW1wbGUgbWVzc2FnZTwvc2FtcGxlPg==):
<sample>sample message</sample>
Run Code Online (Sandbox Code Playgroud)
成功,但当尝试查看队列中的消息时,它只响应:
输入不是有效的 Base-64 字符串,因为它包含非 Base-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><sample>sample message</sample></MessageText>
</QueueMessage>
Run Code Online (Sandbox Code Playgroud)
我在调用 AsString 属性时遇到格式错误,因为默认情况下从存储队列返回的消息是 base64 编码的。
CloudQueue 对象有一个设置为 true 的 EncodeMessage 属性。将其切换为 false,一切正常。这是我的代码:
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueue queue = queueClient.GetQueueReference(ClientQueueName);
queue.EncodeMessage = false;
CloudQueueMessage retrievedMessage = queue.GetMessage();
Run Code Online (Sandbox Code Playgroud)
ClientQueueName 是一个字符串,其中包含我在 Azure 上的队列名称。我认为在发送之前,您的情况也需要将该属性设置为 false。
约翰·唐纳利回答。现在已经过时了。CloudQueue现在被认为是遗留的,您应该QueueClient改用. QueueClient没有属性,但您可以在注入服务时EncodeMessage指定:MessageEncoding
builder.Services.AddAzureClients(builder => {
builder.AddQueueServiceClient(<connection string>)
.ConfigureOptions(o => o.MessageEncoding = QueueMessageEncoding.None);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6125 次 |
| 最近记录: |