24

一連の web.config ファイルをホストする同じコンピューターで実行されるコンソール capplication があります。各 web.config ファイルを開いて接続文字列を復号化し、接続文字列が機能するかどうかをテストするには、コンソール アプリケーションが必要です。

私が直面している問題は、OpenExeConfiguration が wi​​nforms アプリケーション構成ファイル (app.dll.config) を予期しており、OpenWebConfiguration を IIS 経由で実行する必要があることです。これは私のローカル マシンなので、IIS は実行していません (Visual Studio のビルトイン サーバーを使用しています)。

接続文字列を復号化する .NET の機能の堅牢性を維持しながら、web.config ファイルを開く方法はありますか?

ありがとう

更新 OpenWebConfiguration は、IIS に直接クエリを実行している場合、または web.config を検索したい問題の Web サイトである場合に機能します。私が達成しようとしているのは同じ種類の機能ですが、IIS が私のマシンで実行されていないため、IIS クエリを使用していない同じマシン上の Web サイトの web.config ファイルを開くコンソール アプリケーションからです。

4

4 に答える 4

38

わかりました...コンパイルしてアクセスしたので、動作することがわかりました...

      VirtualDirectoryMapping vdm = new VirtualDirectoryMapping(@"C:\test", true);
            WebConfigurationFileMap wcfm = new WebConfigurationFileMap();
            wcfm.VirtualDirectories.Add("/", vdm);


            // Get the Web application configuration object.
            Configuration config = WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");

            ProtectSection(config, @"connectionStrings", "DataProtectionConfigurationProvider");

これは、C:\Test というディレクトリに web.config というファイルがあることを前提としています。

@Dillie-O のメソッドを調整して、Configuration をパラメーターとして受け取りました。

また、System.Web と System.configuration、および web.config で設定された構成ハンドラーを含むすべての dll を参照する必要があります。

于 2009-02-05T15:48:17.697 に答える
3

ConfigurationManager クラスが構成ファイルからセクションを取得する場合、取得した特定のセクションを推測できる「IsProtected」プロパティがあります。保護されている場合は、コードを使用して保護を解除できます。

暗号化/復号化の基本的な方法は次のようになります (以下の記事リンクから取得)。

private void ProtectSection(string sectionName, string provider)
{
    Configuration config =
        WebConfigurationManager.
            OpenWebConfiguration(Request.ApplicationPath);

    ConfigurationSection section =
                 config.GetSection(sectionName);

    if (section != null &&
              !section.SectionInformation.IsProtected)
    {
        section.SectionInformation.ProtectSection(provider);
        config.Save();
    }
}

private void UnProtectSection(string sectionName)
{
    Configuration config =
        WebConfigurationManager.
            OpenWebConfiguration(Request.ApplicationPath);

    ConfigurationSection section =
              config.GetSection(sectionName);

    if (section != null &&
          section.SectionInformation.IsProtected)
    {
        section.SectionInformation.UnprotectSection();
        config.Save();
    }
}

この操作の詳細については、この記事を参照してください。

于 2009-02-04T21:52:34.297 に答える
0

OpenWebConfigurationメソッドでWebConfigurationManagerクラスを使用したいと思います。

web.configへのパスを取り、HTTPContextベースのアプリケーションの場合と同じように開く必要があります。

于 2009-02-04T22:54:23.737 に答える