2016-05-20 89 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

相關問題