对于ASP.Net应用程序部署,您要在machine.config中存储什么类型的信息(如果有)?
如果您不使用它,则如何管理特定于环境的配置设置,这些设置可能会因每个环境而改变?
我正在寻找一些"最佳做法"以及每种做法的优点/缺点。 我们将在两个月内将一个全新的应用程序部署到生产环境中,我对这些类型的决策有一定的自由度。 我想确保我以最好的方式来处理问题,并试图避免以后再开枪射击自己。
仅供参考,我们目前仅将其(machine.config)用于数据库连接信息,并将所有可能更改的其他变量存储在数据库的配置表中。
如果要对服务器进行负载平衡,则必须绝对确保所有服务器上的机器密钥都相同。 Viewstate应该与服务器无关,但并非如此,因此,如果服务器之间的机器密钥不同,则会出现Viewstate损坏错误。
1 2 3
| <machineKey validationKey='A130E240DF1C49E2764EF8A86CEDCBB11274E5298A130CA08B90EED016C0
14CEAE1D86344C29E67E99DF83347E43820050A2B9C9FC89E0574BF3394B6D0401A9'
decryptionKey='2CC37FFA8D14925B9CBCC0E3B1506F35066FEF33FEB4ADC8' validation='SHA1'/> |
来自:http://www.c-sharpcorner.com/UploadFile/gopenath/Page107182007032219AM/Page1.aspx
PS确保您可以启用ViewStateMAC =" false",但不能。
我们正在考虑使用machine.config为环境添加一个密钥,然后在web.config中有一个部分对于所有环境都完全相同。这样我们就可以进行"真实的" XCopy部署。
例如。在每台计算机(本地开发工作站,舞台服务器,构建服务器,生产服务器)的machine.config中,我们将添加以下内容:
然后,任何特定于环境的配置元素都会附加环境,如下所示:
1 2 3 4 5 6
| <connectionStrings>
</connectionStrings>
</appSettings> |
我们没有解决方案的一个问题是如何在web.config中为调试环境而不是实时环境启用语句跟踪。
另一个问题是实时连接字符串包括。用户名和密码现在在您的源代码管理系统中。但是,这对我们来说不是问题。
我们在生产服务器上使用machine.config来设置/删除对生产很重要的特定配置,我们永远不会忘记设置它们。
这些是最重要的2个:
1 2 3 4
| <system.web>
<deployment retail="true" />
<healthMonitoring enabled="true" />
</system.web> |
我不仅将Machine.config用于ASP.NET,而且还将其用于整体配置。我在C#中实现了哈希算法(Tiger),并希望可以通过计算机请求使用它。因此,在GAC中注册了我的程序集并将以下内容添加到machine.config中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?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> |
这使我的代码看起来像这样:
1 2 3 4
| using (var h1 = HashAlgorithm.Create("Tiger192"))
{
...
} |
而且我的代码中的Jcs.Tiger.dll程序集完全没有依赖性,无论是硬的还是软的。