无法读取Azure Function中的应用程序设置

时间:2019-04-18 14:46:57

标签: c# .net azure azure-functions

这是我创建Azure应用功能的第一个步骤。在本地开发机上运行时,它已经可以正常工作了。现在,我已将其部署到Azure中,并将调试器附加到它(非常酷,顺便说一句!)。

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

首先(这是一场战斗,我将在后面进行战斗)我确定有一种方法可以根据local.settngs.json中的内容自动填充Azure Function中的设置,但是现在,我添加了它们全部手动。

enter image description here

现在,让我们看一下StorageConnectionString的设置,其值看起来像这样:

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

enter image description here

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

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

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

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

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

错误消息:

  

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

堆栈跟踪:

  

在Microsoft.WindowsAzure.Storage.Core.Util.CommonUtility.AssertNotNullOrEmpty(字符串paramName,字符串值)在c:\ Program Files(x86)\ Jenkins \ workspace \ release_dotnet_master \ Lib \ Common \ Core \ Util \ CommonUtility中。 c:\ Program Files(x86)\ Jenkins \ workspace \ release_dotnet_master \ Lib \ Common \ File \ CloudFileDirectory.Common.cs:line 224中Microsoft.WindowsAzure.Storage.File.CloudFileDirectory.GetDirectoryReference(String itemName)上的cs:line 143位于XXXXXXX.Common.AzureFunctions.ProcessInbound.DoBooksExist(BookSource bookSource)处,位于XXXXXXX.Common.AzureFunctions.ProcessInbound.Run(TimerInfo myTimer,TraceWriter log)

这个错误让我有些难过,因为它似乎根本不适用。例如,为什么要调用GetDirectoryReference(String itemName)

2 个答案:

答案 0 :(得分:0)

  

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

public static string GetEnvironmentVariable(string name)
{
    return System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}
  在本地开发和在Azure中运行时,都可以从环境变量中读取

应用程序设置。在本地进行开发时,应用设置来自 local.settings.json 文件中的Values集合。在本地和Azure两种环境中,GetEnvironmentVariable("<app setting name>")检索命名的应用程序设置的值。例如,当您在本地运行时,如果您的 local.settings.json 文件包含{ "Values": { "WEBSITE_SITE_NAME": "My Site Name" } },则将返回“我的网站名称”。   或者,您可以使用System.Environment.GetEnvironmentVariable

取自Azure Functions C# developer reference - Environment variables

答案 1 :(得分:0)

好,终于弄明白了。问题的核心是远程连接调试器时的一些奇怪行为。我终于通过在发布之前将“发布配置”设置为“调试”来解决了真正的问题:

enter image description here

问题在于,当我将其设置为“ Release”时,调试器将在其中包含错误的方法的第一行上中断,而不是在出现错误的实际行上中断。这使我认为我在实际上没有引发错误的行上收到错误。

一旦我知道抛出错误的真实行,就解决了这个问题。