【问题标题】:Azure Function unable to read app settings and connection stringsAzure 函数无法读取应用设置和连接字符串
【发布时间】:2019-03-29 06:21:38
【问题描述】:

我在 Azure 中创建了一个 HTTP 触发器函数,希望从 Azure SQL 数据库中读取数据。我在 Function App 的 Connection Strings 部分配置了连接字符串,如下图所示

我使用下面的代码尝试读取连接字符串。

var cnnString = ConfigurationManager.ConnectionStrings["TempleDataContext"].ConnectionString;

在执行时,我在日志中看到以下错误。

2018-10-24T18:13:56.385 [信息] 函数“donors1”的脚本 改变了。重新加载。 2018-10-24T18:13:56.601 [信息] 编译 成功了。 2018-10-24T18:13:58.511 [信息] 执行 'Functions.donors1' (Reason='这个函数被程序调用 通过主机 API。',Id=8b140087-4b50-450e-829c-f7abd9e3a1eb) 2018-10-24T18:13:59.067 [信息] C# HTTP 触发函数 处理了一个请求。 2018-10-24T18:13:59.245 [错误]已执行 “Functions.donors1”(失败,ID=8b140087-4b50-450e-829c-f7abd9e3a1eb) 对象引用未设置为对象的实例。

我想测试 ConnectionStrings 对象返回的所有内容并将代码更改为

var cnnStrings = ConfigurationManager.ConnectionStrings;
    foreach(var c in cnnStrings)
    {
        log.LogInformation(c.ToString());
    }

当我检查日志时,这是我看到的信息。

2018-10-24T18:16:53.755 [信息] 函数“donors1”的脚本 改变了。重新加载。 2018-10-24T18:16:54.540 [信息] 编译 成功了。 2018-10-24T18:16:55.917 [信息] 执行 'Functions.donors1' (Reason='这个函数被程序调用 通过主机 API。', Id=508c49bf-d5e6-4a99-b1db-e1a79545fa91) 2018-10-24T18:16:56.063 [信息] C# HTTP 触发函数 处理了一个请求。 2018-10-24T18:16:56.070 [信息] 数据 源=.\SQLEXPRESS;集成 Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;用户 Instance=true 2018-10-24T18:16:56.079 [信息] 已执行 'Functions.donors1'(成功, id=508c49bf-d5e6-4a99-b1db-e1a79545fa91)

我对它从哪里获取 ConnectionString 信息感到困惑。

只是为了测试一个理论,我还添加了几行来读取应用设置

var appSettings = ConfigurationManager.AppSettings;
foreach(var a in appSettings)
{
    log.LogInformation(a.ToString());
}

它没有向我显示这些行的任何信息。

我正在使用 C# 脚本直接在门户中编写 Azure Functions。我错过了什么吗?任何帮助将不胜感激。

【问题讨论】:

    标签: c# azure azure-functions


    【解决方案1】:

    在函数 v2 中,您应该使用 Environment.GetEnvironmentVariable("string_name",EnvironmentVariableTarget.Process) 从应用程序设置和连接字符串中获取值。

    连接字符串注意事项:

    使用上述方法时,第一个参数取决于类型。意思是当连接字符串的类型是SQLAZURE时,那么第一个参数应该是SQLAZURE + "CONNSTR" + "_stringName"。截图如下:

    代码示例如下:

        //for connection string
        string connStr = Environment.GetEnvironmentVariable("SQLAZURECONNSTR_sqldb_connection",EnvironmentVariableTarget.Process);
        log.LogInformation("the connection string is: " + connStr);
    
        //for app settings
        string appStr = Environment.GetEnvironmentVariable("AzureWebJobsStorage",EnvironmentVariableTarget.Process);
        log.LogInformation("the string in app settings is: " + appStr);
    

    测试结果如下:

    【讨论】:

    • 谢谢伊万。这有帮助。是否有任何来自 Microsoft 的文档告诉我们有关此更改的信息?
    • 接缝没有关于这个的官方文件。如果我对此有所了解,会通知您。
    • 在本地运行 v2 函数并使用 local.settings.json 时,ConnectionStrings 的处理方式似乎与在 Azure 中运行函数时不同。见github.com/Azure/Azure-Functions/issues/717
    【解决方案2】:

    我遇到了同样的事情。除非您使用的是实体框架(如图所示),否则不会附加连接字符串。我只是将我的连接字符串放在 appsettings 中并继续前进。

    【讨论】:

    • 是的,只需将连接字符串放入 Azure 中的应用程序设置和 local.settings.json 的值部分,这很简单且有效。然后只需使用`string connStr = Environment.GetEnvironmentVariable("sqldb_connection",EnvironmentVariableTarget.Process);`
    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    相关资源
    最近更新 更多