2008-09-18 30 views
11

對於ASP.Net應用程序部署,您在machine.config中存儲什麼類型的信息(如果有)?你是如何使用Machine.config的,還是你?

如果您不使用它,您如何管理可能會針對每個環境更改的環境特定配置設置?

我正在尋找一些「最佳實踐」和每個的好處/陷阱。我們即將在兩個月內將全新的應用程序部署到生產環境中,並在這些類型的決策中擁有一定的自由度。我想確保我以儘可能最好的方式接近事情,並儘量避免在晚些時候在腳下自我射擊。

僅供參考目前,我們正在使用它(machine.config)僅用於數據庫連接信息,並存儲可能在數據庫配置表中更改的所有其他變量。

回答

8

我們正在考慮使用machine.config爲環境添加一個鍵,然後在web.config中有一個部分,對於所有環境來說都是相同的。這樣我們就可以進行「真正的」XCopy部署。

例如在machine.config爲每臺計算機(本地開發工作站,服務器階段,構建服務器,生產服務器),我們將增加以下內容:

<appSettings> 
    <add key="Environment" value="Staging"/> 
</appSettings> 

話,也就是環境特定的任何配置元素獲得環境追加,像這樣:

<connectionStrings> 
    <add name="Customers.Staging" provider="..." connectionString="..."/> 
</connectionStrings> 
<appSettings> 
    <add key="NTDomain.Staging" value="test.mydomain.com"/> 
</appSettings> 

的一個問題,我們沒有一個解決方案是如何能夠說在web.config中跟蹤調試環境,而不是活的環境。

另一個問題是,活連接字符串incl。用戶名和密碼現在位於您的源代碼管理系統中。然而這對我們來說不是問題。

+1

已經做了5年以上。這很棒。 – Portman 2008-09-18 19:48:36

2

我使用machine.config不僅適用於ASP.NET,也適用於整體配置。我在C#中實現了一個散列算法(Tiger),並希望它可以通過機器請求來使用。所以,我的註冊程序集在GAC並添加以下到的machine.config:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <mscorlib> 
     <cryptographySettings> 
      <cryptoNameMapping> 
       <cryptoClasses> 
        <cryptoClass Tiger192="Jcs.Tiger.Tiger192, Jcs.Tiger, Culture=neutral, PublicKeyToken=66c61a8173417e64, Version=1.0.0.4"/> 
        <cryptoClass Tiger160="Jcs.Tiger.Tiger160, Jcs.Tiger, Culture=neutral, PublicKeyToken=66c61a8173417e64, Version=1.0.0.4"/> 
        <cryptoClass Tiger128="Jcs.Tiger.Tiger128, Jcs.Tiger, Culture=neutral, PublicKeyToken=66c61a8173417e64, Version=1.0.0.4"/> 
       </cryptoClasses> 
       <nameEntry name="Tiger" class="Tiger192"/> 
       <nameEntry name="TigerFull" class="Tiger192"/> 
       <nameEntry name="Tiger192" class="Tiger192"/> 
       <nameEntry name="Tiger160" class="Tiger160"/> 
       <nameEntry name="Tiger128" class="Tiger128"/> 
       <nameEntry name="System.Security.Cryptography.HashAlgorithm" class="Tiger192"/> 
      </cryptoNameMapping> 
      <oidMap> 
       <oidEntry OID="1.3.6.1.4.1.11591.12.2" name="Jcs.Tiger.Tiger192"/> 
      </oidMap> 
     </cryptographySettings> 
    </mscorlib> 
</configuration> 

這使我的代碼看起來像這樣:

using (var h1 = HashAlgorithm.Create("Tiger192")) 
{ 
    ... 
} 

而且也對Jcs.Tiger沒有依賴性。我的代碼中的所有dll程序集都是硬的或軟的。

5

我們在我們的生產服務器上使用machine.config來設置/刪除對生產很重要的特定配置,我們從不想忘記設置它們。

這些是最重要的2:

<system.web> 
    <deployment retail="true" /> 
    <healthMonitoring enabled="true" /> 
</system.web> 
7

如果負載平衡您的服務器,你絕對必須確保機器關鍵是所有服務器上的相同。 Viewstate應該是服務器不可知的,但它不是,所以如果機器密鑰在不同的服務器上是不一樣的,你會得到viewstate破壞錯誤。

<machineKey validationKey='A130E240DF1C49E2764EF8A86CEDCBB11274E5298A130CA08B90EED016C0 
14CEAE1D86344C29E67E99DF83347E43820050A2B9C9FC89E0574BF3394B6D0401A9' 
decryptionKey='2CC37FFA8D14925B9CBCC0E3B1506F35066FEF33FEB4ADC8' validation='SHA1'/> 

來源:http://www.c-sharpcorner.com/UploadFile/gopenath/Page107182007032219AM/Page1.aspx

PS相信你能enableViewStateMAC = 「假」,但沒有。

相關問題