【问题标题】:Why do I see a FunctionIndexingException when creating a QueueTrigger WebJob Function?为什么在创建 QueueTrigger WebJob 函数时会看到 FunctionIndexingException?
【发布时间】:2018-09-24 13:58:27
【问题描述】:

我创建了一个这样的函数

public static Task HandleStorageQueueMessageAsync(
    [QueueTrigger("%QueueName%", Connection = "%ConnectionStringName%")] string body,
    TextWriter logger)
    {
        if (logger == null)
        {
            throw new ArgumentNullException(nameof(logger));
        }

        logger.WriteLine(body);
        return Task.CompletedTask;
    }

队列名称和连接字符串名称来自我的配置,它有一个INameResolver 来获取值。我在应用程序启动时将连接字符串本身从我的秘密存储放入应用程序配置中。如果连接字符串是授予整个帐户所有权限的普通存储连接字符串,则该方法按预期工作。

但是,在我的场景中,我从一个合作伙伴团队获得了一个 SAS,它只提供对单个队列的读取访问权限。我创建了一个类似于

的存储连接字符串
QueueEndpoint=https://accountname.queue.core.windows.net;SharedAccessSignature=st=2017-09-24T07%3A29%3A00Z&se=2019-09-25T07%3A29%3A00Z&sp=r&sv=2018-03-28&sig=token

(我尝试在 Microsoft Azure 存储资源管理器中使用此连接字符串成功连接)

QueueTrigger 属性中使用的队列名称也是从 SAS 收集的

但是,现在我遇到了以下异常

$exception  {"Error indexing method 'Functions.HandleStorageQueueMessageAsync'"}    Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexingException
InnerException  {"No blob endpoint configured."}    System.Exception {System.InvalidOperationException}

如果您查看连接字符串,您可以看到异常是正确的。我没有配置 blob 端点。但是我也无权访问它,我也不想使用它。我只为这个QueueTrigger 使用存储帐户。

我正在使用 Microsoft.Azure.WebJobs v2.2.0。其他依赖项阻止我升级到 v3.x

当只有对单个队列具有读取访问权限的 SAS URI 可用时,使用存储队列中的消息的推荐方法是什么?如果我已经走在正确的道路上,我需要做什么才能摆脱异常?

【问题讨论】:

    标签: azure azure-storage azure-webjobs azure-webjobssdk


    【解决方案1】:

    如您所见,v2 WebJobs SDK 也需要访问 blob 端点。恐怕这是设计使然,使用没有完全访问权限的连接字符串,如 SAS 是 an improvement 跟踪但尚未实现。

    以下是 v2 SDK 所需的权限。它需要获取 Blob Service 属性(Blob、Service、Read)和队列元数据并处理消息(Queue、Container&Object、Read&Process)。

    Queue Trigger是获取消息并在处理后删除,所以SAS需要Process权限。这意味着即使 SDK 不需要 blob 访问,您获得的 SAS 字符串也未正确授权。

    您可以要求合作伙伴团队以上述最低权限在 Azure 门户上生成 SAS 连接字符串。如果他们不能提供 blob 访问,v3 SDK 似乎是一个尝试的选择。

    但是有一些问题 1. 其他依赖项阻止了更新,正如您提到的 2. v3 SDK 基于.NET Core,这意味着无法避免代码更改。 3. v3 SDK 文档和示例目前仍为under construction。

    【讨论】:

      【解决方案2】:

      让 SAS 令牌为 QueueTrigger 工作时遇到很多问题。

      没有包含 blob 是我的问题。谢谢杰瑞!

      略新的截图(我还需要添加):

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多