13

ASP.Net アプリケーションの展開で、machine.config に格納する情報 (存在する場合) はどのようなものですか?

使用していない場合、環境ごとに変更される可能性のある環境固有の構成設定をどのように管理していますか?

いくつかの「ベスト プラクティス」とそれぞれの利点/落とし穴を探しています。2 か月以内にまったく新しいアプリケーションを本番環境にデプロイしようとしていますが、これらの種類の決定にはある程度の自由があります。可能な限り最善の方法で物事に取り組み、後日自分の足を撃たないようにしたい.

参考までに、現在これ (machine.config) を DB 接続情報のみに使用し、データベースの構成テーブルで変更される可能性のある他のすべての変数を保存しています。

4

4 に答える 4

8

machine.configを使用して環境に1つのキーを追加し、web.configにすべての環境でまったく同じセクションを1つ追加することを検討しています。このようにして、「実際の」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>

解決策がない問題の1つは、ライブ環境ではなくデバッグ環境でweb.configでトレースを有効にする方法です。

もう1つの問題は、ライブ接続文字列が含まれていることです。これで、ユーザー名とパスワードがソース管理システムに追加されました。しかし、これは私たちにとって問題ではありません。

于 2008-09-18T16:29:04.527 に答える
8

サーバーの負荷を分散する場合は、マシンキーがすべてのサーバーで同じであることを絶対に確認する必要があります。ビューステートはサーバーに依存しないはずですが、そうではないため、マシンキーがサーバー間で同じでない場合、ビューステートの破損エラーが発生します。

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

差出人:http ://www.c-sharpcorner.com/UploadFile/gopenath/Page107182007032219AM/Page1.aspx

PSは、ViewStateMAC = "false"を有効にできることを確認しますが、できません。

于 2008-09-18T19:11:54.307 に答える
5

本番サーバーで machine.config を使用して、本番にとって重要な特定の構成を設定/削除します。それらの設定を決して忘れたくありません。

最も重要なのは次の 2 つです。

<system.web>
    <deployment retail="true" />
    <healthMonitoring enabled="true" />
</system.web> 
于 2008-09-18T16:56:02.090 に答える
2

I use machine.config for not just ASP.NET, but for overall config as well. I implemented a hash algorithm (Tiger) in C# and wanted it to be available via machine request. So, registered my assembly in the GAC and added the following to 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>

This allows my code to look like so:

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

and there's no dependency on the Jcs.Tiger.dll assembly in my code at all, hard or soft.

于 2008-09-18T16:27:25.777 に答える