0

我正在使用下面的代码来创建队列,使用SharedSecretTokenProvider. 但是,我无法提供正确的值managerName&managerKey值窗体 windows azure 门户。

这会导致 Http 401Unauthorized 异常。如何解决此错误?

const string queueName = "thequeue";
var tokenProvider = TokenProvider.CreateSharedSecretTokenProvider(
    ConfigurationManager.AppSettings["managerName"],
    ConfigurationManager.AppSettings["managerKey"]);

Uri uri = ServiceBusEnvironment.CreateServiceUri("http", "MyNamespace" , string.Empty);
NamespaceManager namespaceManager = new NamespaceManager(uri, tokenProvider);

QueueDescription qd = namespaceManager.CreateQueue(new QueueDescription(queueName)
{
    DefaultMessageTimeToLive = TimeSpan.FromMinutes(15),
    DuplicateDetectionHistoryTimeWindow = TimeSpan.FromMinutes(10),
    LockDuration = TimeSpan.FromMinutes(2),
    EnableBatchedOperations = true,
    EnableDeadLetteringOnMessageExpiration = true,
    RequiresDuplicateDetection = true
});

在此处输入图像描述

4

2 回答 2

3

在我意识到问题之前,我已经用你的代码尝试了几次。您正在使用SharedSecretTokenProviderwhich 会ACS认为它有一个issuer and a key. 由于您正在尝试使用,因此SAS您需要使用 a CreateSharedAccessSignatureTokenProvider

交换它并提供密钥和密钥名称,你应该会很好。

此外,Viperguynaz 是正确的,您也应该使用“sb”而不是 http。它在到达那里之前失败了,因为令牌提供者正确地拒绝了您的访问,因为它不理解您传递的密钥和密钥名,因为它认为是 ACS 使用的颁发者和密钥。

于 2013-08-14T19:54:14.860 回答
1

从ServiceBusEnvironment.CreateServiceUri 方法开始。请注意,服务总线端点 URI必须始终使用“sb://”协议;例如 sb://contoso.servicebus.windows.net/helloservicebus。

Uri address = ServiceBusEnvironment.CreateServiceUri("sb", "contoso", "helloservicebus");

正确设置您的 URI 输入,您就应该开始营业了。

于 2013-08-03T17:46:37.490 回答