在将Azure服务工作者角色部署到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分钟。
我无法使用变换btw,因为这些设置存储在我的工作者角色应用程序的app.config文件中,我的理解是变换仅适用于web.config文件。
答案 0 :(得分:1)
我认为最简单的方法是在运行时更改appender的设置。如果在global.asax.cs Application_Start方法中添加一些逻辑,则可以使用CloudConfigurationManager更改连接字符串,然后将其从cscfg或app.config中提取。
步骤将是:
protected 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();
}
}
}
两个有用的链接:
答案 1 :(得分:0)
cscfg
文件只是名称/值对,您可以在其中设置您可能需要的任何参数(特别是您希望能够设置/更改的参数而无需重新部署您的应用)。 / p>
但更重要的是:外部公开的唯一配置文件是.cscfg
。您不能以相同的方式任意访问不同的配置文件。您需要根据cscfg更改自行修改配置文件。或者,您可以在启动时从某个位置(例如存储blob)下载配置文件。这允许您修改配置,推送到blob存储,并让您的应用程序下载/使用新配置(您只需要提供一个触发机制来指示您的角色实例使用新配置重新初始化)。