2016-05-20 71 views
0

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

是否有可能对配置进行类似的配置,这些配置不是连接字符串或应用设置/配置设置?

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

<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 [email protected];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文件或天青像我的其他设置的方法吗?当我部署时,在app.config中手动更改它是一件很痛苦的事情,我会一直忘记(!),这意味着每次需要4/5分钟才能进行另一次重新部署。

我不能使用转换顺便说一句,因为这些设置存储在我的工人角色应用程序的app.config文件中,我的理解是只能使用web.config文件进行转换。

回答

0

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

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

+0

感谢大卫。听起来很有趣,我从来没有听说过将存储在存储blob中的app.config文件,但这将工作,重新初始化如果更新的配置放入存储blob肯定会比重新部署整个事情更快。加上会给我我需要的,即每个环境不同的配置(dev/uat等),我不必记得手动更改配置。我也会搜索一下,但是关于如何设置它的任何指示? –

1

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

步骤将是:

  1. 在App.config添加appSetting抱着你要使用的连接字符串本地运行时
  2. 具有相同的名称添加一个设置将cscfg为您appSetting持有蔚蓝色的数据库连接字符串
  3. 安装Microsoft.WindowsAzure.ConfigurationManager NuGet包,如果你还没有使用它
  4. 下面的代码添加到您的global.asax.cs的Application_Start:

保护无效的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

相关问题