質問

IISサーバーに知られているMIMEタイプのリストを取得しようとしています(あなたが見ることができるものは、2年前に尋ねられ、私から答えられました)。コピーペストの回答には次のことが含まれます。

GetObject("IIS://LocalHost/MimeMap") MSDN

GetObject("IIS://localhost/mimemap") KB246068

GetObject("IIS://localhost/MimeMap") スコット・ハンセルマンのブログ

new DirectoryEntry("IIS://Localhost/MimeMap")) スタックオーバーフロー

new DirectoryEntry("IIS://Localhost/MimeMap")) スタックオーバーフロー

New DirectoryServices.DirectoryEntry("IIS://localhost/MimeMap") 速度レビュー


あなたはアイデアを得ます。誰もがあなたが魔法の道を使うことに同意します iis:// localhost/mimemap. 。そして、これはうまく機能しません。

なぜそれが失敗するのかについて私が見つけることができる唯一の手がかり、 IIS MVPからのもの、Chris Crowe's、ブログ:

string ServerName = "LocalHost";
string MetabasePath = "IIS://" + ServerName + "/MimeMap";
    // Note: This could also be something like
    // string MetabasePath = "IIS://" + ServerName + "/w3svc/1/root";

DirectoryEntry MimeMap = new DirectoryEntry(MetabasePath);

ここには2つの手がかりがあります:

  1. 彼は呼ぶ iis://localhost/mimemap メタベースパス. 。それはある種のように聞こえます」"to"メタベース".
  2. 彼はそれを言います メタベース 何か他のものかもしれません。そして彼はそれがどのようなものであるかの例を挙げています。

今、私、そして惑星全体がハードコードをしていますメタバセパス" なので

iis://localhost/MimeMap

それは本当にどうあるべきですか?有効なメタバセパスを構築するためにコードは何をすべきですか?


注:アクセスが拒否されていないエラーはありません。無効なメタバセパスがある場合、エラーは同じです。 iis://localhost/SoTiredOfThis

役に立ちましたか?

解決

ローカルマシンのIIS構成を使用している場合、コードとIISが同じボックスにある場合、指定するだけで十分です。

IIS://Localhost/mimemap

IIS: 一部は、オレの用語のモニカとしても知られています。

IIS6 Metabaseファイルを開くと(C:\Windows\System32\inetsrv\metabase.xml)XMLの大きな「ブロブ」があります。これは実際、平らになった木の構造です。

メタベースのパスはで表されます Location 属性。

モニカー IIS://localhost にマップします Location/LM これは事実上ツリールートです。

モニカー IIS://localhost/MimeMap にマップします Location/LM/MimeMap.

コードがリモートマシンのメタベースにアクセスしている場合、指定する代わりに IIS://localhost/[path], 、1つを指定します IIS://[RemoteMachineName]/[path]. 。これがChris Crowesのコメントの意味です。

IIS://localhost/MimeMap マスターマイムタイプリストでもあります。すべてのサイトがこのリストを継承します(IISメタベースは、継承されたプロパティに大きく依存しています)。

特定のサイトのMIMEタイプをオーバーライドしたい場合は、次のことを変更します。

IIS://localhost/W3SVC/[iisnumber]/ROOT/MimeMap

IIS Metabaseファイルを開き、ボンネットの下で何が起こっているのかを理解するために掘り下げてください。

アップデート:

なぜあなたが作成できるのかについてのあなたの質問に答えるために DirectoryEntry パスが無効なオブジェクト、 DirectoryEntry は、IIS、LDAP、WINNTなどのさまざまなタイプのADSIプロバイダーにバインドするために使用される汎用ラッパーオブジェクトです。の作成を許可します DirectoryEntry 指定されたパスに必ずしも一致するオブジェクトがあるとは限らないオブジェクト。一部のADSIプロバイダー操作には、この機能が必要になる場合があります。

静的メソッドがあります DirectoryEntry 呼び出されました Exists オブジェクトの存在をテストするために使用できること。例えば:

// Does Default Website exist?
if(DirectoryEntry.Exists("IIS://localhost/w3svc/1"))
{
  // Do work...
}

他のヒント

これをやろうとしているときに0x80005000を返すことに問題がありました。私の問題の愚かな原因は、私がIIS7を使用していて、IIS6 Metabase互換性サポートをインストールしていなかったことです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top