Azure Function App .Net 8 版本无法从 appsettings.json 绑定 ServiceBusTrigger 连接字符串值

问题描述 投票:0回答:1

我的 servicebustrigger 连接字符串位于 appsettings.json 文件中。 function app 8 版本无法绑定值。

这是appsettings.json 文件

方法一:

`{
 
  "keyVault": "https://abc/",
  "NormalTopicName": "abc",
  "NormalTelemetrySubscriptionName": "abc",
  "ServiceBusConnection": "connectionstring-value",
}`

方法2:

`{
 
  "keyVault": "https://abc/",
  "NormalTopicName": "abc",
  "NormalTelemetrySubscriptionName": "abc",
  "ServiceBusConnection": "@Microsoft.KeyVault(VaultName=abc;SecretName=abc--secret)",
}`

方法 2 效果很好。当我在 localsettings.json 文件中执行相同操作时。

这是 localsettings.json 文件

`{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", 
    "keyVault": "https://abc/"
    "NormalTopicName": "abc",
    "NormalTelemetrySubscriptionName": "abc",
    "ServiceBusConnection": "@Microsoft.KeyVault(VaultName=abc;SecretName=abc--secret)",
  }

}`

这是功能代码:

 public class Function1
 {
     private readonly ILogger<Function1> _logger;
     private readonly IConfiguration _configuration;
     private const string RawTopicNameSetting = "RawTopicName";
     private const string RawSubscriptionNameSetting = "RawSubscriptionName";
     private const string ServiceBusConnectionSetting = "ServiceBusConnection";

     public Function1(ILogger<Function1> logger, IConfiguration configuration)
     {
         _logger = logger;
         _configuration = configuration;
     }

     [Function(nameof(Function1))]
     public async Task Run(
         [ServiceBusTrigger(RawTopicNameSetting, RawSubscriptionNameSetting, Connection =ServiceBusConnectionSetting)]
         ServiceBusReceivedMessage message,
         ServiceBusMessageActions messageActions)
     {
         _logger.LogInformation("I am Logger");
         await messageActions.CompleteMessageAsync(message);
     }
 }

我尝试过 localsettings.json 它似乎工作正常。将密钥对值移动到 appsettings.json 文件后无法按预期工作。

我已经确保在应用程序设置的配置中正确加载值。 Azure 函数与 .net 8 隔离进程绑定的主要问题。

binding azure-functions .net-8.0 appsettings servicebus
1个回答
0
投票

Appsettings.json
仅在读取秘密、密钥等设置时有效,功能代码如下:

 var connectionString = _configuration["ServiceBus"]

但是在读取函数签名中的连接字符串时它不起作用,因为函数签名会在

local.settings.json
中查找环境变量,请参阅MSDOC

ServiceBusTrigger("%queuename%", Connection = "ServiceBusConnection")

正如@SilentSO中提到的,

在本地运行时阅读

local.settings.json
,是Functions核心工具调试体验的一部分。

在 Azure 中运行该函数时,在

FunctionApp=>Settings=>Environment Variables=>App Settings
下添加连接字符串。这提供了额外的功能,例如Key Vault 参考

我已将服务总线连接字符串的密钥保管库引用添加为

Function App=>Environment Variables
下的应用程序设置:

ServiceBusConnection= @Microsoft.KeyVault(SecretUri=https://keyvaultname.vault.azure.net/secrets/secret2/5d1ab934e83d4762903c31f8df7551de)

enter image description here

我已使用您的函数代码并部署到Azure函数应用程序。

功能应用响应:

enter image description here

© www.soinside.com 2019 - 2025. All rights reserved.