使用压缩字符串调用createMessage后出现错误400响应(Azure队列REST代理)

时间:2014-02-07 20:14:56

标签: php azure compression azure-storage azure-storage-queues

我正试图跟随Best Practices for Handling Large Messages with Windows Azure Queues而我已经陷入了第一道障碍。本文建议在将消息添加到Azure队列之前压缩消息,我尝试使用以下代码进行压缩...

$compressedMessage = gzcompress('Test', 9);
try {
  $queueRestProxy->createMessage($queueName, $compressedMessage);  
} catch (ServiceException $e) {
  $code = $e->getCode();
  $error_message = $e->getMessage();
  echo $code . ': ' . $error_message . '<br />';
}

不幸的是,ServiceException引发如下......

400: Fail: Code: 400 Value: XML specified is not syntactically valid. details (if any): InvalidXmlDocumentXML specified is not syntactically valid. RequestId:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX Time:2014-02-07T20:04:07.8227706Z316Error parsing Xml content.

删除对gzcompress的调用(即传递字符串而不进行压缩)会导致消息“Test”成功添加到队列中。

有谁知道如何克服这个问题?

1 个答案:

答案 0 :(得分:1)

我相信您收到此错误的原因是因为当您压缩字符串时,您会收到类似 x┌♂I-.☺ ♥▌☺íe 的字符串。正如你所看到的,它有一些怪异的角色。您可以做的一件事是将该字符串转换为base64编码格式,然后将其保存为消息。

$compressedMessage = gzcompress('Test', 9);

$queueRestProxy->createMessage("test", base64_encode($compressedMessage));

我只是尝试了同样的方法,它正确地保存了消息。您需要记住的一件事是,当您收到消息时,您必须在解压缩之前先解码它。