3

编辑这个问题是在 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,时间戳:2016 年 4 月 18 日晚上 10:17:41。系统:远程服务器返回错误:(401)未经授权。

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

一开始,我使用共享访问策略设置了我的连接字符串,该策略只允许监听队列并将其更改为管理声明,但我仍然有这个错误。

为了解决这个问题,我必须建立与 RootManageSharedAccessKey 的连接,以提供对服务总线命名空间的完全访问权限

这是正常/理想的行为吗?将来是否可以设置具有不同共享访问策略的连接字符串?

4

3 回答 3

3

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

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

我们还需要通过一流的门户 UI 公开此值,以使其更易于配置。

于 2016-04-19T01:49:58.917 回答
1

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

    public async Task MyFunction([ServiceBusTrigger(MyQueueName, Microsoft.ServiceBus.Messaging.AccessRights.Listen)] Message message, TextWriter log)
于 2019-01-30T08:19:51.330 回答
0

我的解决方案稍微简单一些,我采用了将带有 connectionString 的 app.config 文件用于存储在设置中的 ServiceBus 的方法:

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

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

于 2018-05-09T15:18:23.423 回答