WebJob ServiceBus主题权限

时间:2015-02-23 21:31:51

标签: c# azure azure-webjobs azureservicebus azure-webjobssdk

我参与了一个多层项目,其中一部分正在消耗来自第三方系统的“事件”流。供应商通过Azure Service Bus主题发布这些主题 - 他们提供,控制和提供管理公交车。我们只提供了URI,TopicName和Subscription详细信息。

我们的方法是使用SDK中提供的ServiceBusTrigger组合一个Webjob,以处理收听新消息的问题。触发将它们处理到我们的系统中。然而,由于这项工作一直无法从主题中读取,我们似乎已经遇到了障碍。这项工作失败了,模糊Timeout Exception

Unhandled Exception: System.TimeoutException: The timeout elapsed upon attempting to obtain a token while accessing 'https://****-sb.accesscontrol.windows.net/WRAPv0.9/'. 
---> System.IdentityModel.Tokens.SecurityTokenException: The token provider was unable to provide a security token while accessing 'https://****-sb.accesscontrol.windows.net/WRAPv0.9/'. 
Token provider returned message: 'The operation has timed out'.

但更进一步,跟踪包括:

[ERR] at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
[ERR] at Microsoft.ServiceBus.NamespaceManager.OnEndTopicExists(IAsyncResult result)
[ERR] at Microsoft.ServiceBus.NamespaceManager.EndTopicExists(IAsyncResult result)

供应商随后确认订阅对主题的唯一许可/声明为Listen

任何人都可以确认ServiceBusTrigger的权限要求是什么吗?

并且作为+1,假设它出于某种原因需要更多Listen(即需要Manage),是否有人愿意建议另一种方法?失去WebJob基础设施似乎是一种耻辱(该项目已经有3个其他工作) - 特别是丢失了async和amp;等功能。并行处理来自主题的消息

2 个答案:

答案 0 :(得分:5)

要关闭此功能,我们已对WebJobs SDK进行了建议的更改(此处提取请求:https://github.com/Azure/azure-webjobs-sdk/pull/528)。这将在下一个版本中。以下是您如何为每个属性指定AccessRights的示例:

public static void JobFunction(
    [ServiceBusTrigger("inputqueue", AccessRights.Listen)] string message,
    [ServiceBus("outputqueue", AccessRights.Send)] out string message)
{
    . . .
}

未指定时,默认为"管理"。当设置为manage以外的任何内容时,SDK将不会尝试创建任何SB资源。我认为这符合您的需求?

答案 1 :(得分:1)

SDK进行以下调用,这需要管理权限。 Microsoft.Azure.WebJobs.ServiceBus.Listeners.NamespaceManagerExtensions。 如果您无法设置这些权限,一种替代方法是不将SDK用于服务总线触发器,而是将其用于其他所有内容。