2014-02-07 40 views
0

我試圖關注Best Practices for Handling Large Messages with Windows Azure Queues,我已經落在第一個障礙。文章建議將其添加到Azure的隊列,這點我已經嘗試使用下面的代碼做之前壓縮消息...使用壓縮字符串(Azure隊列REST代理)調用createMessage後的錯誤400響應

$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的調用(即傳遞字符串而不進行壓縮)會導致消息「測試」成功添加到隊列中。

有誰知道我該如何克服這個問題?

回答

1

我相信你得到這個錯誤的原因是因爲當你壓縮字符串時,你會得到一個字符串,如x┌♂I-.☺ ♥▌☺íe。正如你可以看到它有一些怪異的角色。你可以做的一件事是將該字符串轉換爲base64編碼格式,然後將其保存爲消息。

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

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

我只是試了一樣,它正確保存了消息。你需要記住的一件事是,當你得到這個消息時,你必須在解壓之前解碼它。

+0

感謝萬Gaurav - 解決了這個問題! – w5m