Azure 函数的服务总线队列触发器:此操作需要管理声明
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: The remote server returned an error: (401) Unauthorized. Manage claim is required for this operation. TrackingId:6e27fe40-f667-4230-9995-d09f2ac67f35_G17,TimeStamp:4/18/2016 10:17:41 PM. System: The remote server returned an error: (401) Unauthorized.
一开始,我使用共享访问策略设置了我的连接字符串,该策略只允许侦听队列并将其更改为管理声明,但我仍然遇到此错误。
要解决此问题,我必须设置与 RootManageSharedAccessKey 的连接,以提供对服务总线命名空间的完全访问权限
是 normal/desired 行为吗?将来是否可以设置具有不同共享访问策略的连接字符串?
如果未指定,则默认使用 AccessRights
AccessRights.Manage
。您可以使用高级门户编辑器覆盖它,指定更受限制的 AccessRights
值:
{
"bindings": [
{
"type": "serviceBusTrigger",
"direction": "in",
"accessRights": "listen",
"queueName": "samples-input"
}
]
}
我们需要通过第一个 class 门户 UI 公开此值,以便更容易配置。
我的解决方案稍微简单一些,我采用的方法是使用一个 app.config 文件和一个连接字符串到我的 ServiceBus 存储在设置中:
<add name="AzureWebJobsServiceBus" value="e.t.c."/>
而且我在服务总线值中输入了错误的值。在哪里可以找到这些东西并不是很明显,因为自从我上次查看以来 Azure 已经改变了一些东西。如需指导,请转至服务总线的命名空间(搜索服务总线,然后 select 您的命名空间),然后选择共享访问策略。在那里你应该找到你的共享访问密钥,你可以将这个服务总线值复制到你的应用程序配置中(注意并注意实际生产密钥的源代码安全......)我的共享密钥是为管理发送设置的听着,我刚才抄错了...
使用自定义 AccessRights 值以这种方式声明触发函数:
public async Task MyFunction([ServiceBusTrigger(MyQueueName, Microsoft.ServiceBus.Messaging.AccessRights.Listen)] Message message, TextWriter log)
编辑这个问题写于 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: The remote server returned an error: (401) Unauthorized. Manage claim is required for this operation. TrackingId:6e27fe40-f667-4230-9995-d09f2ac67f35_G17,TimeStamp:4/18/2016 10:17:41 PM. System: The remote server returned an error: (401) Unauthorized.
一开始,我使用共享访问策略设置了我的连接字符串,该策略只允许侦听队列并将其更改为管理声明,但我仍然遇到此错误。
要解决此问题,我必须设置与 RootManageSharedAccessKey 的连接,以提供对服务总线命名空间的完全访问权限
是 normal/desired 行为吗?将来是否可以设置具有不同共享访问策略的连接字符串?
如果未指定,则默认使用 AccessRights
AccessRights.Manage
。您可以使用高级门户编辑器覆盖它,指定更受限制的 AccessRights
值:
{
"bindings": [
{
"type": "serviceBusTrigger",
"direction": "in",
"accessRights": "listen",
"queueName": "samples-input"
}
]
}
我们需要通过第一个 class 门户 UI 公开此值,以便更容易配置。
我的解决方案稍微简单一些,我采用的方法是使用一个 app.config 文件和一个连接字符串到我的 ServiceBus 存储在设置中:
<add name="AzureWebJobsServiceBus" value="e.t.c."/>
而且我在服务总线值中输入了错误的值。在哪里可以找到这些东西并不是很明显,因为自从我上次查看以来 Azure 已经改变了一些东西。如需指导,请转至服务总线的命名空间(搜索服务总线,然后 select 您的命名空间),然后选择共享访问策略。在那里你应该找到你的共享访问密钥,你可以将这个服务总线值复制到你的应用程序配置中(注意并注意实际生产密钥的源代码安全......)我的共享密钥是为管理发送设置的听着,我刚才抄错了...
使用自定义 AccessRights 值以这种方式声明触发函数:
public async Task MyFunction([ServiceBusTrigger(MyQueueName, Microsoft.ServiceBus.Messaging.AccessRights.Listen)] Message message, TextWriter log)