IIS:メタベースパスを取得する方法は?
-
01-10-2019 - |
質問
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つの手がかりがあります:
- 彼は呼ぶ
iis://localhost/mimemap
メタベースパス. 。それはある種のように聞こえます」道"to"メタベース". - 彼はそれを言います 道 に メタベース 何か他のものかもしれません。そして彼はそれがどのようなものであるかの例を挙げています。
今、私、そして惑星全体がハードコードをしていますメタバセパス" なので
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互換性サポートをインストールしていなかったことです。