【问题标题】:Configure my connection string in the Azure application setting and configure it in my web.config as an environment variable在 Azure 应用程序设置中配置我的连接字符串,并在我的 web.config 中将其配置为环境变量
【发布时间】:2018-12-26 19:38:18
【问题描述】:

我在 Azure 中有一个 Web 应用程序,我在其应用程序设置中配置了 connectionStrgin,但我不知道如何将此配置设置为应用程序 web.config (.Net) 中的环境变量。

有人有一些文档或知道如何使这成为可能,到目前为止,我已经查看了 Microsoft 和其他站点的文档以进行故障排除,但我还没有找到解决方案

【问题讨论】:

  • 嗨,为什么需要它作为环境变量?我收集 Azure 能够处理连接字符串部分。

标签: .net azure web-config connection-string application-settings


【解决方案1】:

连接字符串

对于 ASP.NET 等 .NET 应用程序,这些连接字符串会在运行时注入到您的 .NET 配置 connectionStrings 设置中,覆盖键等于链接数据库名称的现有条目。

这些设置也将在运行时作为环境变量使用,并以连接类型为前缀。环境变量前缀如下:

SQL 服务器:SQLCONNSTR_
MySQL:MYSQLCONNSTR_
SQL 数据库:SQLAZURECONNSTR_
自定义:CUSTOMCONNSTR_

您使用ConfigurationManager.ConnectionStrings["keyname"]; 检索应用程序中的设置。

那么在我的 web.config 中我应该将 connectionString 设置为空白并自动使用应用程序设置的 connectionString 吗?

是的,是的。当您在 azure 应用程序设置和 web.config 中都有连接字符串时,the azure settings will override web.config。在本地测试时,您可以在 web.config 中设置键/值。

【讨论】:

  • 感谢您的cmets,我做了一些测试并且答案是正确的,应用程序的配置在我的应用程序中注入了连接字符串,但是我无法连接到我的数据库,但我认为这个问题是因为我使用了一个奇怪的框架,Gale
  • 老实说,当您不想使用连接字符串将 web.config 文件提交到源代码控制时,我不明白这是如何工作的,但仍然需要那些在本地调试您的应用程序.如果您执行ConfigurationManager.ConnectionStrings["keyname"];,然后在web.config 文件中将connectionStrings 留空,则永远不会在本地进行调试。
【解决方案2】:

感谢大家的帮助,我设法为我的问题提供了完整的解决方案。有效地在.Net中连接链被自动替换,但在我的情况下,连接仍然存在问题。要解决这个问题,请将数据库配置为“自定义”并从我的 web.config 的代码中删除连接字符串的值。

<connectionStrings>
<add name="hidhiddenname1"
     connectionString=""
     providerName="Gale.Db.Factories.SQLServerFactory"/>
<add name="hidhiddenname2"
     connectionString=""
     providerName="Gale.Db.Factories.SQLServerFactory"/>
</connectionStrings>

我希望这可以帮助其他人:D

【讨论】:

  • 很高兴看到您解决了问题。但你也可以将我的回复标记为答案。
  • 您可以将其提交到源代码管理,因为您没有公开任何内容。但是,当您尝试在本地调试您的应用程序时,这将不起作用,因为您的连接字符串不明确。
【解决方案3】:

当您在应用程序设置中设置键/值对时,键/值将在运行时注入到您的配置中。同样,对于您的连接字符串,它们会在运行时注入到您的配置中。这些设置将在运行时覆盖来自 Web.Config 的任何设置。如果 Azure 中缺少这些设置,您的程序将在 web.config 中查找。您使用 ConfigurationManager.AppSettings["keyname"]; 检索应用程序中的设置

https://docs.microsoft.com/en-us/azure/app-service/web-sites-configure#app-settings 和这里https://buildazure.com/2015/11/30/azure-web-app-application-settings/ 了解更多信息

【讨论】:

  • 那么在我的 web.config 中我应该将 connectionString 设置为空白,并且会自动使用应用程序设置的 connectionString?
  • 对@NicolasHerrera。
  • 感谢您的cmets,我做了一些测试并且答案是正确的,应用程序的配置在我的应用程序中注入了连接字符串,但是我无法连接到我的数据库,但我认为这个问题是因为我使用了一个奇怪的框架,Gale。
【解决方案4】:

我进一步修改了 Nicolas Herrera 提供的答案,由于安全原因,我们无法将计划文本连接字符串添加到应用服务配置部分,最重要的是,我遇到了计划文本连接字符串的格式问题,所以结束从配置部分内的密钥库中读取连接字符串值

Connectionstring name = "你的 ConnectionString 键名"

值 = @Microsoft.KeyVault(SecretUri="你的密钥库 uri")

Type = Custom(它必须是自定义的,否则它不起作用)但是如果你想看看什么适合你,你可以再次尝试 diff type

仅供参考,我的配置中仍然有连接字符串值,以便我可以在本地运行我的应用程序以进行调试,连接字符串值在每个环境中替换,在应用程序服务中,如 Microsoft 文档中所述

对于 ASP.NET 和 ASP.NET Core 开发人员,在 App Service 中设置连接字符串就像在 Web.config 中设置它们一样,但您在 App Service 中设置的值会覆盖 Web.config 中的值。您可以将开发设置(例如,数据库文件)保存在 Web.config 中,并将生产机密(例如,SQL 数据库凭据)安全地保存在应用服务中。当您在本地进行调试时,相同的代码使用您的开发设置,并在部署到 Azure 时使用您的生产机密。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    相关资源
    最近更新 更多