2014-02-07 2 views
0

Best Practices for Handling Large Messages with Windows Azure Queues을 따르려고하고 있는데 첫 번째 장애물에 빠졌습니다. 이 기사는 다음과 같이 불행하게도 압축 된 문자열 (Azure Queue REST Proxy)을 사용하여 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에 대한 호출을 제거하면 (즉, 압축하지 않고 문자열을 전달하면) 'Test'메시지가 대기열에 성공적으로 추가됩니다.

누구든지이 문제를 어떻게 극복 할 수 있는지 알고 있습니까?

답변

1

나는이 오류가 발생하는 이유는 문자열을 압축하면 x┌♂I-.☺ ♥▌☺íe과 같은 문자열이 생기기 때문입니다. 보시다시피 이상한 모양의 문자가 있습니다. 당신이 할 수있는 한 가지는 그 문자열을 base64로 인코딩 된 형식으로 변환 한 다음 메시지로 저장하는 것입니다.

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

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

방금 ​​시도해 본 결과 메시지가 제대로 저장되었습니다. 명심해야 할 것은 메시지를받을 때 압축을 풀기 전에 먼저 메시지를 디코딩해야한다는 것입니다.

+0

감사합니다 백만 Gaurav - 그 문제를 해결! – w5m