C# c++;Azure存储队列正在发送错误类型的字符串 我继承了一个C++应用程序(其中IM没有专家,IM .NET家伙),它将消息发送到一个JSON表单的Azure队列。这很好,当我尝试在我的.NET控制台应用程序中从队列中选取消息时,会显示以下消息:
“输入不是有效的Base-64字符串,因为它包含一个非Base-64字符、两个以上的填充字符或填充字符中的一个非空白字符。” < > C++代码看起来像这样(注意注释的哑消息,它给出了它的样子) 我甚至可以在存储资源管理器中看到以下消息: 但它的格式似乎不正确,就像我从队列中选取消息时:C# c++;Azure存储队列正在发送错误类型的字符串 我继承了一个C++应用程序(其中IM没有专家,IM .NET家伙),它将消息发送到一个JSON表单的Azure队列。这很好,当我尝试在我的.NET控制台应用程序中从队列中选取消息时,会显示以下消息:,c#,c++,azure,azure-storage,C#,C++,Azure,Azure Storage,“输入不是有效的Base-64字符串,因为它包含一个非Base-64字符、两个以上的填充字符或填充字符中的一个非空白字符。” < > C++代码看起来像这样(注意注释的哑消息,它给出了它的样子) 我甚至可以在存储资源管理器中看到以下消息: 但它的格式似乎不正确,就像我从队列中选取消息时: CloudStorageAccount storageAccount = CloudStorageAccount.Parse(GetConnectionString()); CloudQueu
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(GetConnectionString());
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueueClient clnt = storageAccount.CreateCloudQueueClient();
CloudQueue queue = clnt.GetQueueReference("bogus");
queue.EncodeMessage = true;
List<Service> userServices = null;
CloudQueueMessage retrievedMessage = queue.GetMessage();
List<CloudAppItem> items = JsonConvert.DeserializeObject<List<CloudAppItem>>(queue.GetMessage().AsString);
CloudStorageAccount-storageAccount=CloudStorageAccount.Parse(GetConnectionString());
CloudQueueClient=storageAccount.CreateCloudQueueClient();
CloudQueueClient clnt=storageAccount.CreateCloudQueueClient();
CloudQueue=clnt.GetQueueReference(“伪”);
queue.EncodeMessage=true;
List userServices=null;
CloudQueueMessage retrievedMessage=queue.GetMessage();
列表项=JsonConvert.DeserializeObject(queue.GetMessage().AsString);
它在最后一行失败了。这不是因为序列化程序。queue.GetMessage().AsString返回错误
更新(仍不工作)
我取出了encodedmessage语句,因为我以前曾尝试将其添加到中以使其工作。它仍然不起作用。我还显示了原始字符串,由于它是类上的私有方法,因此不可访问:
出现此错误的原因是,您指示SDK从base64编码的字符串解码消息,但消息内容不是base64编码的(您将消息保存为纯文本) 请更改以下代码行:
queue.EncodeMessage = true;
到
这应该可以解决问题。从文件:
获取或设置一个值,该值指示在
添加或检索消息
我取出了encodedmessage语句,因为我以前曾尝试将其添加到中以使其工作。它仍然不起作用
在中,我们可以发现您只需删除queue.EncodeMessage=true代码>,但的默认值为true,请显式将CloudQueue.EncodeMessage设置为false
CloudQueueClient clnt = storageAccount.CreateCloudQueueClient();
CloudQueue queue = clnt.GetQueueReference("bogus");
queue.EncodeMessage = false; //explicitly set CloudQueue.EncodeMessage to false
谢谢你的帮助,不过我故意把它放进去看看是否会有所不同。它不起作用。我还在上面添加了另一个显示原始字符串的屏幕截图,这是一个显示字符串本身的私有方法,但不可访问。似乎有效。非常感谢。我不知道为什么我没有那样做!
queue.EncodeMessage = false;
CloudQueueClient clnt = storageAccount.CreateCloudQueueClient();
CloudQueue queue = clnt.GetQueueReference("bogus");
queue.EncodeMessage = false; //explicitly set CloudQueue.EncodeMessage to false