“AzureWebJobsAzureWebJobsServiceBus”的存储帐户连接字符串无效

irlmq6kh  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(130)

我使用ServiceBusTrigger创建了一个Azure Function应用程序(侦听主题上的订阅)。那很好但是现在我试图创建一个QueueTrigger来监听一个简单的队列,但是我得到了以下错误。
我也用同样的方式去做事情。我在Visual Studio中创建了一个新项目,并将其指向我在Azure上的存储帐户。指定队列名称。队列存在。我尝试创建新的共享访问策略。已将连接字符串复制到local.settings.json。

[2022-02-04T18:30:22.917Z] Found C:\Users\me\.NET\EmailUtilityLogger\EmailUtilityLogger\EmailUtilityLogger.csproj. Using for user secrets file configuration.
[2022-02-04T18:30:24.684Z] Microsoft.Azure.WebJobs.Host: Error indexing method 'Function1'. Microsoft.Azure.WebJobs.Extensions.Storage: Storage account connection string for 'AzureWebJobsAzureWebJobsServiceBus' is invalid.
[2022-02-04T18:30:24.703Z] Error indexing method 'Function1'
[2022-02-04T18:30:24.705Z] Microsoft.Azure.WebJobs.Host: Error indexing method 'Function1'. Microsoft.Azure.WebJobs.Extensions.Storage: Storage account connection string for 'AzureWebJobsAzureWebJobsServiceBus' is invalid.
[2022-02-04T18:30:24.706Z] Function 'Function1' failed indexing and will be disabled.
[2022-02-04T18:30:24.709Z] No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).
[2022-02-04T18:30:24.746Z] The 'Function1' function is in error: Microsoft.Azure.WebJobs.Host: Error indexing method 'Function1'. Microsoft.Azure.WebJobs.Extensions.Storage: Storage account connection string for 'AzureWebJobsAzureWebJobsServiceBus' is invalid.

我不知道我错过了什么。这主要是生成项目时的默认代码。错误消息中的一个奇怪的地方是连接名称。它正在使用“AzureWebJobsAzureWebJobsServiceBus”,而我的连接名称是“AzureWebJobsServiceBus”。
这是我的APP。

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace EmailUtilityLogger
{
    public class Function1
    {
        [FunctionName("Function1")]
        public void Run([QueueTrigger("emailutilititylogger", Connection = "AzureWebJobsServiceBus")]string myQueueItem, ILogger log)
        {
            log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
        }
    }
}

和local.settings.json文件。

{
    "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=saneteaidemo;AccountKey=1234abcdsecretstuff==;....",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "AzureWebJobsServiceBus": "Endpoint=sb://pspeaidemo.servicebus.windows.net/;SharedAccessKeyName=EmailLogger;SharedAccessKey=1234abcdsecretstuff="
  }
}
2ekbmq32

2ekbmq321#

您遇到的错误显示连接字符串名称(AzureWebJobsAzureWebJobsServiceBus)与配置文件(AzureWebJobsServiceBus)中的名称不匹配。验证local.settings.json是否与文件的较新版本一起复制,并且其内容是否与项目文件内容匹配。

lf5gs5x2

lf5gs5x22#

有两种解决方案:
1.当您使用[QueueTrigger]从

<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Storage" Version="4.0.4" />

版本可以不同。
在这种情况下,您设置名称应该是“AzureWebJobsAzureWebJobsServiceBus”,azure总是在您的连接名称之前添加“AzureWebJobs”。值的格式应为连接字符串格式

"DefaultEndpointsProtocol=https;AccountName......"

1.使用不同包中的[QueueTrigger],替换

<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Storage" Version="4.0.4" />

<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues" Version="5.1.2" />

在本例中,您可以在设置中精确定义“AzureWebJobsServiceBus”,此外,您还可以定义

"AzureWebJobsServiceBus__queueServiceUri":"https://xxxxxxx.queue.core.windows.net/"

使用Azure凭据而不定义密钥的优势

相关问题