[英]Why do I see a FunctionIndexingException when creating a QueueTrigger WebJob Function?
我創建了一個這樣的函數
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 可用時,從存儲隊列使用消息的推薦方法是什么? 如果我已經在正確的道路上,我需要做什么才能擺脫異常?
如您所見,v2 WebJobs SDK 也需要訪問 blob 端點。 恐怕這是設計使然,使用沒有完全訪問權限的連接字符串(如 SAS)是一種已跟蹤但尚未實現的改進。
以下是 v2 SDK 所需的權限。 它需要獲取 Blob 服務屬性(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 文檔和示例目前仍在構建中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.