【问题标题】:Absolute HTTP(S) request URL in Azure's Service BusAzure 服务总线中的绝对 HTTPS)请求 URL
【发布时间】:2016-07-04 13:18:13
【问题描述】:

我正在尝试使用 PHP 建立与 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 />";
    }
?>

我不明白这是哪里出了问题。有人知道我可以做些什么来防止这个错误吗?

【问题讨论】:

    标签: php azure servicebus


    【解决方案1】:

    根据 cmets here,您似乎收到此错误,因为您使用的是旧方式连接到 Azure 服务总线。请使用可从 Azure 门户获取的基于 Shared Access Signature 的连接字符串。应采用以下格式:

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

    来自cmets:

    您好 Martin,感谢您的反馈。你是对的,连接 此示例中的字符串使用旧的 ACS 格式,而门户 生成使用较新的共享访问签名令牌的字符串(请参阅 https://msdn.microsoft.com/lib... 了解更多信息)。我会得到这个 主题已尽快更新。

    您应该能够将新的连接字符串替换为 门户。确保其格式正确。它应该是 像

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

    【讨论】:

    • 感谢您的回复!我认为不推荐使用经典门户中的连接字符串。该解决方案也不起作用,因为服务构建器无法从服务总线获取实例。当使用通过PowerShell创建命名空间获得的连接字符串时,可以获取实例,但是问题是当我尝试发送它时。这段代码实际上来自这个例子。 :)
    • 所以我的结论是 php 代码错了。我错了吗?
    【解决方案2】:

    PHP SDK 没有错。目前,用于 PHP 的 Azure SDK 使用 ACS 命名空间实现服务总线。但默认情况下,门户和 Powershell 在 SAS 命名空间中创建服务总线。

    要使用 Azure SDK for 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/了解更多信息。

    另外,从最后一段我们可以看出:

    Service Bus 仍然完全支持 ACS,并且在可预见的将来会支持

    在 ACS 命名空间中创建服务总线后,您可以在经典门户中找到它。

    同时,微软并未表示不推荐使用连接字符串形式的经典门户。

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 2014-05-16
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多