【问题标题】:Azure config - not connection string or app settingAzure 配置 - 不是连接字符串或应用设置
【发布时间】:2016-05-20 20:17:51
【问题描述】:

在将云服务工作者角色部署到 Azure 时,我总是通过 cscfg 文件设置各种连接字符串和应用程序设置/配置设置,如果它们需要在运行时更改,则通过 Azure Web 界面进行设置,一切正常.

是否可以对不是连接字符串或应用程序设置/配置设置的配置做类似的事情?

具体来说,我有类似以下的内容:

<log4net>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />


      <!-- This is the connection string I would like to store in Azure -->
      <connectionString value="Server=tcp:azure.sql.server,1433;Database=MyAzureSqlDbName;User ID=my-user-name@my-server;Password=my-password;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Application Name=log4net" />


      <commandText value="INSERT INTO [MyLogTableName] ( [Date], [etc] ) VALUES ( @log_date, etc)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
    </appender>
</log4net>

有没有办法像我的其他设置一样将该连接字符串放入 cscfg 文件或 Azure 中?部署时在 app.config 中手动更改它很痛苦,我一直忘记(!),这意味着每次重新部署需要 4/5 分钟。

顺便说一句,我不能使用转换,因为这些设置存储在我的辅助角色应用程序的 app.config 文件中,我的理解是转换仅适用于 web.config 文件。

【问题讨论】:

    标签: azure connection-string app-config azure-worker-roles


    【解决方案1】:

    我认为最简单的方法是在运行时更改附加程序的设置。如果您在 global.asax.cs Application_Start 方法中添加一些逻辑,您可以使用 CloudConfigurationManager 更改连接字符串,然后从 cscfg 或 app.config 中提取它。

    步骤是:

    1. 在 app.config 中添加一个 appSetting 来保存本地运行时要使用的连接字符串
    2. 向您的 cscfg 添加一个与您的 appSetting 同名的设置以保存 azure db 连接字符串
    3. 如果您尚未使用 Microsoft.WindowsAzure.ConfigurationManager nuget 包,请安装它
    4. 将以下代码添加到您的 global.asax.cs Application_Start:

    受保护的 void Application_Start() {

    var hier = (Hierarchy)LogManager.GetRepository();
    if (hier != null)
    {
        var appenders = hier.GetAppenders().OfType<AdoNetAppender>();
        foreach (var appender in appenders)
        {
            appender.ConnectionString =
                CloudConfigurationManager.GetSetting(connectionStringKey);
            appender.ActivateOptions();
        }
    }
    

    }

    两个有用的链接:

    4 Tips for using Log4NET's ADONetAppender in ASP.NET

    Changing Log4net Connection String at Runtime

    【讨论】:

      【解决方案2】:

      cscfg 文件只是名称/值对,您可以在其中设置您可能需要的任何参数(特别是您希望能够在不重新部署应用的情况下设置/更改的参数)。

      但更重要的是:唯一对外暴露的配置文件是.cscfg。您不能以相同的方式任意访问不同的配置文件。您需要根据 cscfg 更改自己修改配置文件。或者,您可以在启动时从某处(例如存储 blob)下载配置文件。这使您可以修改配置、推送到 blob 存储,并让您的应用下载/使用新配置(您只需要提出一个触发机制来指示您的角色实例以使用新配置重新初始化)。

      【讨论】:

      • 感谢大卫。听起来很有趣,我从来没有听说过将 app.config 文件存储在存储 blob 中,但这会起作用,如果将更新的配置放入存储 blob,则重新初始化肯定会比重新部署整个文件更快。 Plus会给我我需要的东西,即每个环境的不同配置(dev/uat等),我不必记得手动更改配置。我也会进行搜索,但有什么关于我将如何进行设置的指示吗?
      猜你喜欢
      • 2015-04-03
      • 1970-01-01
      • 2021-09-23
      • 2021-02-15
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 2015-09-14
      • 2019-03-29
      相关资源
      最近更新 更多