2010-06-16 28 views
8

在我提到的其中一個應用程序中,連接字符串存儲在AppSettings中!直到現在,我一直在<connectionstring/>元素中存儲連接。但是,正確的方法是什麼?connectionstrings和appsettings有什麼區別?

所以我的問題是,web.config中<connectionstrings><appsettings>之間有什麼區別,有什麼特別的原因,爲什麼我應該或不應該在appsettings中存儲連接字符串?是否有任何規則/準則要遵循?或者這完全是開發人員的選擇?

+1

如果我沒有記錯,ASP.NET 1.1不支持web.config中的「connectionStrings」部分,所以連接字符串與appSettings一起結束。你可能會遇到在1.1天內就有根源的應用程序(或者也許是開發者的習慣在2.0+項目中仍然存在)。 – 2010-06-16 17:07:24

回答

10

connectionStringappSettings之間的根本區別:

他們尋找不同的東西。在.NET 2.0及以上版本中:

A connectionString對象是一個XML節點,它具有要設置的特定屬性;在語義上它指的是數據庫連接字符串。

例如,connectionString如下所示:

<connectionStrings> 
    <clear/> 
    <add name="LocalSqlServer" 
      connectionString="Data Source=(local);Initial Catalog=aspnetdb;Integrated Security=True" 
      providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

你會發現它有幾個不同的屬性:

  • name
  • connectionString:這裏面有一個特定的字符串它需要一個安全機制Initial Catalog(在這種情況下Integrated Security
  • providerName

appSettings僅僅是一個用戶定義的鍵值對,可以讓你...好...設置應用程序設置。它可以是任何東西:

<appSettings> 
    <add key="Mom" value="Your"/> 
    <add key="UseCache" value="True"/> 
    <add key="MapsKey" value="1234567890-AA"/> 
    <add key="SMTPServer" value="smtp.peterkellner.net"/> 
</appSettings> 

在許多情況下,這純粹是放的connectionString一個鍵值對像appSettings(語義上和程序上)。 encrypt the connectionString when you need to會更難。

有更多的信息about this from this blog post

0

連接字符串通常保存在<connectionstring/>元素中......並且是一個很好的指導原則,因爲它的名稱正確。

有時您可能會使用第三方控件或用戶控件來查找<appsettings>元素中某個鍵中的連接字符串。這應該是指南的唯一例外。

4

據我所知,除了在「正確」的位置之外,它並沒有產生巨大的差別 - 將連接字符串放在它們自己的部分中的主要優點(您可以對連接字符串進行加密。 )是這樣,你可以encrypt that section沒有加密你可能想改變的所有設置。

+0

另外,你的服務器人員可以單獨加密和修改連接字符串部分,所以當你從dev到qa轉移到生產時,獲得這個權利是他們的責任,而不是你自己的責任。 – 2010-06-16 16:54:05

0

此外,在IIS7中,可以通過相應的IIS7管理維護連接字符串。

0

關於部署,有他們之間的一個顯著差異。當您將Web軟件包導入IIS時:

  • 連接字符串將自動包含在嚮導對話框中以供進一步參數化。
  • 默認情況下,應用程序設置不會在那裏。如果你真的想這樣做,請按照下列步驟「自定義參數 - 在web.config文件中應用程序設置」的Configuring Parameters for Web Package Deployment

節這意味着,當涉及到部署,你最好把環境連接字符串中的參數(數據庫,緩存,AWS密鑰/祕密等)。它將顯式地提供dev/staging/prod環境之間的區別。