.NET 存储客户端库 (Microsoft.WindowsAzure.StorageClient.dll) 对队列消息内容进行 base-64 编码,因此当您使用 .NET 客户端库时,有效限制为 8192 * .75 = 6144字节。(这是因为 base 64 编码增加了 1/3 的开销。)
(请注意,您不必进行base 64 编码。恰好是这个库确保队列消息的内容可以安全地嵌入到 XML 中的方式,这是队列服务对消息的要求。)
编辑:这是使用 Microsoft.WindowsAzure.StorageClient.Protocol 命名空间将原始文本(不是 base 64 编码)放入队列消息(并随后检索它)的示例代码:
using System;
using System.Net;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;
using Microsoft.WindowsAzure.StorageClient.Protocol;
class Program
{
static void Main(string[] args)
{
var q = CloudStorageAccount.Parse("UseDevelopmentStorage=true").CreateCloudQueueClient().GetQueueReference("testqueue");
q.CreateIfNotExist();
var req = QueueRequest.PutMessage(new Uri(q.Uri, q.Name + "/messages"), 30, null);
var body = QueueRequest.GenerateMessageRequestBody("hello world");
req.ContentLength = body.Length;
q.ServiceClient.Credentials.SignRequest(req);
using (var stream = req.GetRequestStream())
{
stream.Write(body, 0, body.Length);
stream.Close();
}
req.GetResponse();
req = QueueRequest.GetMessages(new Uri(q.Uri, q.Name + "/messages"), 30, 32, null);
q.ServiceClient.Credentials.SignRequest(req);
using (var response = (HttpWebResponse)req.GetResponse())
{
using (var msgResponse = QueueResponse.GetMessages(response))
{
foreach (var msg in msgResponse.Messages)
{
Console.WriteLine("MESSAGE: " + msg.Text);
q.DeleteMessage(msg.Id, msg.PopReceipt);
}
}
}
q.Delete();
}
}