2016-07-01 6 views
1

Ich versuche, mit PHP eine einfache Verbindung zum Azure-Servicebus herzustellen und kann sie nicht zum Laufen bringen. Ich erhalte den Fehler:Absolute HTTP (S) -Anfrage-URL im Azure-Servicebus

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

Dies ist der Code, den ich jetzt bin versucht zu laufen:

<?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 />"; 
    } 
?> 

Ich verstehe nicht, wo dies nicht in Ordnung ist. Hat jemand eine Idee, was ich tun kann, um diesen Fehler zu vermeiden?

Antwort

0

Aufgrund der Kommentare here scheint es, dass Sie diesen Fehler erhalten, weil Sie eine ältere Verbindung zum Azure Service Bus verwenden. Verwenden Sie die Verbindungszeichenfolge Shared Access Signature, die Sie von Azure Portal abrufen können. Es sollte in folgendem Format sein:

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

Aus den Kommentaren:

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

Vielen Dank für Ihre Antwort! Ich denke, die Verwendung der Verbindungszeichenfolge aus dem klassischen Portal ist veraltet. Diese Lösung funktioniert auch nicht, denn dann kann der Service Builder die Instanz nicht vom Servicebus holen. Bei der Verwendung meiner Verbindungszeichenfolge, die durch Erstellen des Namespace über PowerShell erhalten wurde, kann die Instanz abgerufen werden. Das Problem ist jedoch, wenn ich versuche, sie stattdessen zu senden. Dieser Code stammt eigentlich aus diesem Beispiel. :) – DaveLar

+0

Also meine Schlussfolgerung ist, dass es der PHP-Code ist, der falsch ist. Liege ich falsch? – DaveLar

0

Es ist nicht die falsch in PHP SDK. Derzeit implementiert das Azure SDK for PHP Service-Bus mit ACS-Namespace. Standardmäßig erstellen das Portal und Powershell jedoch den Servicebus im SAS-Namespace.

Damit Azure SDK für PHP den Service-Bus verarbeiten kann, müssen Sie den Service-Bus-Server im ACS-Namespace erstellen. Sie können sich auf https://blogs.msdn.microsoft.com/servicebus/2014/09/03/change-to-azure-service-bus-portal-default-authentication-mechanism-for-service-bus-namespaces-now-sas/ für weitere Informationen beziehen.

Zusätzlich aus dem letzten Absatz, können wir sehen:

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

Nach dem Linienbus in ACS-Namespace erstellen, können Sie es in der klassischen Portal finden.

Inzwischen hat Microsoft nicht gesagt, dass die Verwendung von Connectionstring Form Classic Portal veraltet ist.

Verwandte Themen