【问题标题】:Trouble reading Application Settings in Azure Function在 Azure 函数中读取应用程序设置时遇到问题
【发布时间】:2019-04-18 14:46:57
【问题描述】:

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

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

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

现在,让我们看一下设置StorageConnectionString的值是这样的:

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

堆栈跟踪:

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

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

【问题讨论】:

    标签: c# .net azure azure-functions


    【解决方案1】:

    要获取环境变量或应用设置值,请使用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

    【讨论】:

      【解决方案2】:

      好的,终于弄明白了。问题的核心是调试器在远程连接时如何工作的一些奇怪行为。通过在发布前将发布配置设置为调试,我终于弄清楚了真正的问题:

      问题是,当我将其设置为“发布”时,调试器会在出现错误的方法的第一行中断,而不是在出现错误的实际行中断。这让我认为我在实际上并没有抛出错误的行上得到了错误。

      一旦我知道引发错误的真正原因,解决它就轻而易举了。

      【讨论】:

        猜你喜欢
        • 2020-06-12
        • 1970-01-01
        • 2018-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        • 2011-12-02
        • 1970-01-01
        相关资源
        最近更新 更多