Ограничение REST-прокси для очереди Windows Windows Azure

Я пишу обработчик заданий для удаления из хранилища очередей Windows Azure с помощью Azure PHP SDK. Задание просто попытайтесь получить 32 сообщения в пакете, обработать их, а затем удалить сообщения из очереди и повторить эти шаги. Тем не менее, каждый раз, когда я запускаю сценарий PHP, ниже выдается ошибка, после того как цикл был выполнен ровно 27 раз:

PHP Fatal error:  Uncaught HTTP_Request2_MessageException: Malformed response:  in /usr/share/php/HTTP/Request2/Adapter/Socket.php on line 1013
#0 /usr/share/php/HTTP/Request2/Adapter/Socket.php(1013): HTTP_Request2_Response->__construct('', true, Object(Net_URL2))
#1 /usr/share/php/HTTP/Request2/Adapter/Socket.php(136): HTTP_Request2_Adapter_Socket->readResponse()
#2 /usr/share/php/HTTP/Request2.php(939): HTTP_Request2_Adapter_Socket->sendRequest(Object(HTTP_Request2))
#3 /usr/share/php/WindowsAzure/Common/Internal/Http/HttpClient.php(262): HTTP_Request2->send()
#4 /usr/share/php/WindowsAzure/Common/Internal/RestProxy.php(141): WindowsAzure\Common\Internal\Http\HttpClient->send(Array, Object(WindowsAzure\Common\Internal\Http\Url))
#5 /usr/share/php/WindowsAzure/Common/Internal/ServiceRestProxy.php(86): WindowsAzure\Common\Internal\RestProxy->sendContext(Object(WindowsAzure\Common\Internal\Http\HttpCallContext))
#6 /usr/share/php/WindowsAzure/Common/Internal/ServiceRestProxy.php(125): WindowsAzure\Common\Internal\ServiceRestPr in /usr/share/php/HTTP/Request2/Response.php on line 215

Любой специалист по Azure может мне помочь?

1 ответ

Чтобы обойти ограничение соединения для HTTPS в операциях хранилища Azure (включая запрос хранилища или, скажем, частичную загрузку блочного блоба), необходимо установить для строки соединения службы блоба Azure значение http.

Вы можете сделать что-то вроде этого (передать false перед выполнением многооперационного вызова):

function getBlobStorageProxy($secure = true) {
    if ($secure) {
      $connectionString = "DefaultEndpointsProtocol=https;AccountName=[AccountName];AccountKey=[AccountKey]";
    } else {
      $connectionString = "DefaultEndpointsProtocol=http;AccountName=[AccountName];AccountKey=[AccountKey]";
    }

    $this->serviceBuilder = ServicesBuilder::getInstance();
    return $this->serviceBuilder->createBlobService($connectionString);
}
Другие вопросы по тегам