首页 > 解决方案 > 在 Azure 函数中读取应用程序设置时遇到问题

问题描述

这是我第一次尝试创建 Azure App Function。在我的本地开发机器上运行时,我已经让它工作了。现在我已将它部署到 Azure 中,并将调试器附加到它(非常酷,顺便说一句!)。

在我的本地主机上运行时,我可以将该local.settngs.json文件用于所有应用程序设置。这很好用。但是,在 Azure 中远程运行该功能时,我似乎在访问应用程序设置的简单过程中遇到了障碍。

首先(这是我稍后会打的一场战斗)我确信有一种方法可以根据里面的内容自动填充 Azure 函数中的设置local.settngs.json,但现在,我都是手动添加的。

在此处输入图像描述

现在,让我们看一下StorageConnectionStringwho's value 的设置,如下所示:

DefaultEndpointsProtocol=https; AccountName=[redacted]; AccountKey=[redacted]; EndpointSuffix=core.windows.net

在此处输入图像描述

所有这三种获取值的尝试都在我的本地主机上工作,但是在远程 Azure 函数中调试时,这三种尝试也都失败了:

string storageConString = ConfigurationManager.AppSettings["StorageConnectionString"];

string storageConString = CloudConfigurationManager.GetSetting("StorageConnectionString");

string storageConString = Environment.GetEnvironmentVariable("StorageConnectionString");

在所有情况下,我都会收到此错误:

错误信息:

值不能为空。参数名称:itemName

堆栈跟踪:

在 Microsoft.WindowsAzure.Storage.Core.Util.CommonUtility.AssertNotNullOrEmpty(String paramName, String value) 在 c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\Common\Core\Util\CommonUtility.cs:line 143 在 Microsoft.WindowsAzure.Storage.File.CloudFileDirectory.GetDirectoryReference(String itemName) 在 c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\Common\File\CloudFileDirectory.Common.cs:XXXXXXX 的第 224 行。 Common.AzureFunctions.ProcessInbound.DoBooksExist(BookSource bookSource) 在 XXXXXXX.Common.AzureFunctions.ProcessInbound.Run(TimerInfo myTimer, TraceWriter 日志)

这个错误让我有点难过,因为它甚至似乎都不适用。例如,为什么它在调用GetDirectoryReference(String itemName)

标签: c#.netazureazure-functions

解决方案


要获取环境变量或应用设置值,请使用System.Environment.GetEnvironmentVariable,如以下代码示例所示:

public static string GetEnvironmentVariable(string name)
{
    return System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}

在本地开发和在 Azure 中运行时,都可以从环境变量中读取应用设置。在本地开发时,应用程序设置来自local.settings.json文件Values中的集合。在本地和 Azure 这两种环境中,检索命名应用设置的值。例如,当您在本地运行时,如果您的local.settings.json文件包含. 或者您可以使用System.Environment.GetEnvironmentVariableGetEnvironmentVariable("<app setting name>"){ "Values": { "WEBSITE_SITE_NAME": "My Site Name" } }

取自Azure Functions C# 开发人员参考 - 环境变量


推荐阅读