繁体   English   中英

Azure功能的ServiceBus队列触发器:此操作需要管理声明

[英]ServiceBus Queue Trigger For Azure Function: Manage claim is required for this operation

编辑此问题是2016年编写的,因此可能不再适用

我刚刚创建了一个带有一个函数的简单函数应用程序,当一个新消息添加到队列时应该触发(门户内函数)

我使用“ServiceBusQueueTrigger - C#”模板来创建我的函数,所以代码看起来像这样:

using System;
using System.Threading.Tasks;

public static void Run(string myQueueItem, TraceWriter log)
{
    log.Verbose($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
}

从Azure门户,我有这个错误:

Microsoft.ServiceBus:远程服务器返回错误:(401)未经授权。 此操作需要管理声明。 TrackingId:6e27fe40-f667-4230-9995-d09f2ac67f35_G17,TimeStamp:4/18/2016 10:17:41 PM。 系统:远程服务器返回错误:(401)未经授权。

Azure功能错误 - (401)未经授权 - 此操作需要管理声明。

首先,我使用共享访问策略设置了我的连接字符串,该策略仅允许侦听队列并将其更改为Manage声明但我仍然有此错误。

为了解决这个问题,我必须与RootManageSharedAccessKey建立连接,以便完全访问服务总线命名空间。

这是正常/期望的行为吗? 将来是否可以使用不同的共享访问策略设置连接字符串?

如果未指定,则使用的默认AccessRightsAccessRights.Manage 您可以使用高级门户网站编辑器覆盖它,指定更受限制的AccessRights值:

{
  "bindings": [
    {
      "type": "serviceBusTrigger",
      "direction": "in",
      "accessRights": "listen",
      "queueName": "samples-input"
    }
  ]
}

我们需要通过第一类门户UI公开这个值,以便更容易配置。

使用自定义AccessRights值以这种方式声明您触发的函数:

    public async Task MyFunction([ServiceBusTrigger(MyQueueName, Microsoft.ServiceBus.Messaging.AccessRights.Listen)] Message message, TextWriter log)

我的解决方案有点简单,我已经采用了一个app.config文件的方法,该文件带有一个connectionString,存储在我的ServiceBus设置中:

<add name="AzureWebJobsServiceBus" value="e.t.c."/>

我把错误的值放在服务总线值上。 在找到这些东西的时候并不是很明显,因为自从我上次查看以来,Azure已经移动了一些东西。 有关指导,请转到服务总线的命名空间(搜索服务总线,然后选择您的命名空间),然后选择共享访问策略。 在那里你应该找到你的共享访问密钥,你可以将这个服务总线值复制到你的应用程序配置中(小心并注意实际生产密钥的源代码安全性....)我的共享密钥已设置为管理发送听着,我只是把它复制错了......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM