以编程方式为 .NET 5 Azure Function ServiceBusTrigger 连接字符串设置环境变量?

Posted

技术标签:

【中文标题】以编程方式为 .NET 5 Azure Function ServiceBusTrigger 连接字符串设置环境变量?【英文标题】:Set Environment Variable for .NET 5 Azure Function ServiceBusTrigger connection string programmatically? 【发布时间】:2022-01-12 19:59:46 【问题描述】:

首先,我知道连接字符串来自 Azure 门户/local.settings.json 上的配置,并且它是一个环境变量,您可以通过以下方式访问:

Environment.GetEnvironmentVariable("Name", EnvironmentVariableTarget.Process);

我正在尝试从 appsettings.json 设置 ServiceBusTrigger 连接字符串。 我在this blog on how to do it. 之后添加了一个 appsettings.json 文件,我可以从 appsettings.json 文件访问设置,但是在 Program.cs 中,当我尝试使用以下设置环境变量时:

.ConfigureAppConfiguration(c => 

  var config = c.SetBasePath(Environment.CurrentDirectory)
              .AddJsonFile("appsettings.json", true, true)
              .AddEnvironmentVariables()
              .Build();
  // Setting the Environment Variable for the connection string
  Environment.SetEnvironmentVariable(config["ConnectionString:Name"], config["ConnectionString:Value"]);
)

其中“名称”是函数中传递给连接的内容,“值”是连接字符串,我收到以下错误:

Microsoft.Azure.WebJobs.ServiceBus:Microsoft Azure WebJobs SDK ServiceBus 连接字符串“名称”缺失或为空。

我所说的连接:

public async Task Run(ServiceBusTrigger("myqueue", Connection = "Name")] string myQueueItem, FunctionContext)  // Some Implementation 

我试图避免在 Azure 门户的应用配置中设置连接字符串“名称”。有没有办法以编程方式做到这一点?

【问题讨论】:

【参考方案1】: 当您通过Environment.SetEnvironmentVariable 设置变量时,它不会显示在应用程序设置中。但我们可以按预期通过Environment.GetEnvironmentVariable 使用它。 SetEnvironmentVariable(String,String) 创建、修改或删除存储在当前进程中的环境变量。 虽然你提到的解决方案不是很好,但它可以实现你的要求。不利影响是重新启动函数应用时,变量会丢失

有关SetEnvironmentVariable的更多信息,请参阅此MSFT documentation

【讨论】:

以上是关于以编程方式为 .NET 5 Azure Function ServiceBusTrigger 连接字符串设置环境变量?的主要内容,如果未能解决你的问题,请参考以下文章

使用 .NET 以编程方式运行流分析转换查询

如何在 Azure 角色中以编程方式获取订阅 ID?

以编程方式将文件从 Azure Blob Storage 传输到 Google Cloud Storage

以编程方式导入/导出 (Azure) Databricks Notebooks

第三周-第14章节-Python3.5-函数式编程

使用 Javascript 以编程方式创建 Azure 存储帐户的最佳选择是啥?