web-dev-qa-db-ja.com

IIS 7.5 applicationHost.configファイルが更新されていません

現在、アプリケーションを調整してIIS 7.5を新しいAPIで構成するために、Microsoft.Web.Administration(MWA)名前空間をいじっています。 IISレベルの変更はすべて次のファイルで表現する必要があることを理解しました(Win2K8-R2を使用しています)。

%WINDIR%\ System32\inetsrv\config\applicationHost.config

したがって、ServerManagerオブジェクトを使用して構成の変更をコミットすると、それに応じてファイルが更新されます。

新しいMIMEタイプを追加した後(MWAでプログラム)、applicationHost.config fileに変更はありませんでしたが、IISマネージャーウィンドウに新しいMIMEタイプが表示され、IISがこれを認識します問題のないMIMEタイプ。 OSを再表示した後も-設定ファイルには、新しく追加されたMIMEタイプが含まれていませんが、IISマネージャーウィンドウにリストされています。

私のアプリケーションプールは32ビット(Enable32BitAppOnWin64 = true)に強制されているため、関連する構成ファイルは%WINDIR%\SysWOW64\inetsrv\Configの下に配置する必要があると思いましたが、(存在する場合...)-変更されません。コードが更新をコミットした後。

誰かがこれを説明できますか?私は何かを逃していますか(おそらく間違ったファイルを見ていますか?)?誰かがSysWOW64\inetsrv\configディレクトリに光を当てることができますか?

これは、MIMEタイプを追加するための私のコードです。

ServerManager manager = new ServerManager();
ConfigurationElementCollection staticContentCollection = manager
    .GetApplicationHostConfiguration()
    .GetSection("system.webServer/staticContent")
    .GetCollection();

//MIMETypes is a string[] array, each object is {FileExt},{MIMETypeStr}
foreach (string pair in MIMETypes)
{
    string[] mimeProps = pair.Split(',');

    ConfigurationElement mimeTypeEl = staticContentCollection
          .Where(a => 
                   (string)a.Attributes["fileExtension"].Value == mimeProps[0])
          .FirstOrDefault();


    if (mimeTypeEl != null)
    {
        staticContentCollection.Remove(mimeTypeEl);
    }

    ConfigurationElement mimeMapElement = 
                  staticContentCollection.CreateElement("mimeMap");

    mimeMapElement["fileExtension"] = mimeProps[0];
    mimeMapElement["mimeType"] = mimeProps[1];

    staticContentCollection.Add(mimeMapElement);
}

manager.CommitChanges();

//At this point all is working but the config file does not reflect the change
28
OmriSela

私はあなたのコードを試したところ、うまくいきました。このMIMEタイプがサイトではなくグローバルMIMEタイプコレクションに追加されていることをご存知ですか?

また、_<staticContent>_リストの最後に追加されます。ServerManager.CommitChanges()を実行しても、このリストは並べ替えられません。

また、Windows 2008-R2では、_applicationHost.config_の正しい場所は次のとおりです。

C:\ Windows\System32\inetsrv\config

このファイルを開くには、notepad.exeまたはNotePad2を使用していると思います(32ビットエディターでは開くことができません)。 Notepadは変更時にファイルを再読み込みしません。NotePad2は、ファイル変更通知(alt-F5)を表示するように指示する必要があります。

また、_.xxx_などの異常なものを追加してみてください。更新を実行してから、構成ファイルを開いて検索してください。そこにあることを保証します。

更新:

以下のコメントに加えて、NotePad ++または32ビットエディターを使用して_applicationHost.config_を開く方法がわかりません。 64ビットエディターであるNotePad2をダウンロードできますか。

http://www.flos-freeware.ch/notepad2.html

リリース候補は問題なく動作します。

64ビットWindows 2008またはWindows 7のデフォルトのインストールでは、_applicationHost.config_フォルダーに_C:\Windows\SysWOW64\inetsrv\Config_があってはなりません。なぜそこに表示されるのかわかりません。

25
Kev

64ビット互換のお気に入りの32ビットエディター(つまり、メモ帳++)で64ビットIIS構成ファイルを開いて編集するための回避策として、次のWindowsディレクトリシンボリックリンクを作成できます。 C:\Windows\System32\inetsrv\Configを指します。この方法では、C:\Windows\SysWOW64\inetsrv\Configにある32ビットのConfigディレクトリを置換して64を指しますビットバージョン。たとえば、32ビットバージョンと64ビットバージョンの両方を必要とするアプリケーションがある場合、この方法は機能しません。

詳細については、 このMSDNブログ にアクセスすることを強くお勧めします。

3
user717236