c# - Azure 函数无法读取应用设置和连接字符串
问题描述
我在 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”(原因=“此函数是通过主机 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”(原因=“此函数是通过主机 API 以编程方式调用的。”,ID=508c49bf-d5e6-4a99-b1db-e1a79545fa91)2018-10- 24T18:16:56.063 [信息] C# HTTP 触发器函数处理了一个请求。2018-10-24T18:16:56.070 [信息] 数据源=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;用户实例=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。我错过了什么吗?任何帮助将不胜感激。
解决方案
在函数 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);
推荐阅读
- firebase - 无法在 Firebase Firestore 安全规则中使用逻辑 OR 运算符 - 条件始终评估为“假”
- magento - 将 magento 2.1.7 升级到 2.2.5 后出现错误
- android - BottomNavigationView 显示项目问题
- firebase - 将用户参数“值”链接到 Firebase 事件控制台中的事件值
- nginx - 基于响应的 Nginx 上游重试
- c# - 在 IIS 服务器上托管网站时无法创建数据库。在本地它正在工作
- python - 如何在 Openpyxl 中获取当前活动工作表的名称
- apache-spark - 当我尝试从检查点重新启动作业时,触发广播变量的类型应该是数字还是字符串
- android - 在构建的 APK 的根目录中包含一个文件
- tensorflow - Tensorflow 1.11 需要 CUDA 9.0 的 CuDNN 7.2,但是没有这样的库