28

私は現在、新しいAPIでIIS 7.5を構成するようにアプリケーションを調整するために、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
4

2 に答える 2

25

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

また、<staticContent>リストの最後に追加されます。このリストは、再ソートされても再ソートされませんServerManager.CommitChanges()

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

C:\ Windows \ System32 \ inetsrv \ config

このファイルを開くには、notepad.exeまたはNotePad2のいずれかを使用していると思います(32ビットエディターでは開くことができません)。メモ帳は変更時にファイルをリロードしません。NotePad2はファイル変更通知(alt-F5)を表示するように指示する必要がありますが、箱から出して表示されません。

また、のような変わったものを追加してみて.xxxください。アップデートを実行してから、設定ファイルを開いて検索してください。私はそれがそこにあることを保証します。

アップデート:

applicationHost.config以下のコメントに加えて、 NotePad ++または32ビットエディタを使用してどのように開くことができるかわかりませんが、確かにできません。64ビットエディタであるNotePad2をダウンロードできますか?

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

リリース候補は問題なく機能します。

64ビットのWindows2008またはWindows7のデフォルトのインストールでapplicationHost.configは、C:\Windows\SysWOW64\inetsrv\Configフォルダーにはありません。なぜそこにあるのかわかりません。

于 2011-04-18T00:14:49.980 に答える
3

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

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

于 2013-07-11T14:19:24.037 に答える