2016-07-01 6 views
1

Я пытаюсь установить базовое соединение с сервисной шиной Azure с использованием PHP и не может заставить его работать. Я получаю ошибку:Абсолютный URL-адрес запроса HTTP (S) в служебной шине Azure

1: HTTP_Request2 needs an absolute HTTP(S) request URL, 'sb://mynamespace.servicebus.windows.net/myqueue/messages' given 

Это код, который я сейчас пытаюсь запустить:

<?php 
    require_once '../vendor/autoload.php'; 

    use WindowsAzure\Common\ServicesBuilder; 
    use WindowsAzure\Common\ServiceException; 
    use WindowsAzure\ServiceBus\Models\BrokeredMessage; 

    // Create Service Bus REST proxy. 
    $connectionString = "Endpoint=sb://mynamespace.servicebus.windows.net/;SharedSecretIssuer=owner;SharedSecretValue=[MyVal]"; 
    $serviceBusRestProxy = ServicesBuilder::getInstance()->createServiceBusService($connectionString); 

    try { 
     // Create message. 
     $message = new BrokeredMessage(); 
     $message->setBody("my message"); 

     // Send message. 
     $serviceBusRestProxy->sendQueueMessage("myqueue", $message); // this is the line that causes the error 
    } 
    catch(Exception $e){ 
     // Handle exception based on error codes and messages. 
     // Error codes and messages are here: 
     // http://msdn.microsoft.com/library/windowsazure/hh780775 
     $code = $e->getCode(); 
     $error_message = $e->getMessage(); 
     echo $code.": ".$error_message."<br />"; 
    } 
?> 

Я не понимаю, где это происходит не так. Кто-нибудь знает, что я могу сделать, чтобы предотвратить эту ошибку?

ответ

0

На основании комментариев here, похоже, вы получаете эту ошибку, потому что используете старый способ подключения к Azure Service Bus. Используйте строку подключения Shared Access Signature, которую вы можете получить от Azure Portal. Он должен быть в следующем формате:

$connectionString = "Endpoint=<namespacename>.servicebus.windows.net;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=<your_key_from_the_portal>"; 

Из комментариев:

Hi Martin, thank you for the feedback. You are correct, the connection string in this example uses the old ACS format, while the portal produces strings that use the newer Shared Access Signature token (see https://msdn.microsoft.com/lib ... for more info). I will get this topic updated ASAP.

You should be able to just substitute the new connection string from the portal. Make sure it is in the correct format. It should be something like

$connectionString = "Endpoint=.servicebus.windows.net;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=";

+0

Благодарим вас за ответ! Я думаю, что использование connectionstring из классического портала устарело. Это решение также не работает, поэтому строитель службы не может получить экземпляр из служебной шины. При использовании моей строки соединения, которая была получена путем создания пространства имен через PowerShell, экземпляр может быть извлечен, однако проблема заключается в том, когда я пытаюсь его отправить. Этот код на самом деле из этого примера. :) – DaveLar

+0

Итак, я пришел к выводу, что это неправильный код php. Я ошибаюсь? – DaveLar

0

Это не так в PHP SDK. В настоящее время Azure SDK для PHP реализует служебную шину с пространством имен ACS. Но по умолчанию портал и Powershell создают служебную шину в пространстве имен SAS.

Чтобы использовать Azure SDK для PHP для обслуживания служебной шины, вам необходимо создать сервер служебной шины в пространстве имен ACS. Вы можете обратиться к https://blogs.msdn.microsoft.com/servicebus/2014/09/03/change-to-azure-service-bus-portal-default-authentication-mechanism-for-service-bus-namespaces-now-sas/ за дополнительной информацией.

Кроме того, из последнего абзаца, мы можем видеть:

ACS is still fully supported in Service Bus and will be for the foreseeable future

После создания сервисной шины в ACS пространстве имен, вы можете найти его в классическом портале.

Между тем, Microsoft не заявила, что использование классического портала connectionstring является устаревшим.