IIS: Wie die Metabasispfad bekommen?
-
01-10-2019 - |
Frage
Ich versuche, um die Liste der MIME-Typen ein bekannter zu bekommen IIS-Server (, die Sie gefragt wurden, sehen und und von mir vor 2 Jahren beantwortet). Die Kopie kleistert Antwort beinhaltet:
Sie erhalten die Idee. Alle sind sich einig, dass man einen magischen Pfad verwenden iis: // localhost / MimeMap . Und das funktioniert gut, mit Ausnahme der Zeiten, in denen es nicht.
Der einzige Hinweis i finden, warum es fehlschlägt, von einem IIS-MVP, Chris Crowe ist, ein Blog :
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);
Es gibt zwei Hinweise hier:
- Er fordert
iis://localhost/mimemap
die Metabasispfad . Welche klingt für mich wie es eine Art " Pfad " ist ein " Metabasis ". - Er sagt, dass die Pfad der Metabasis könnte etwas anderes; und er gibt ein Beispiel, wie es sein könnte.
Im Moment i, und der ganze Planet sind hartzucodieren die " Metabasepath ", wie
iis://localhost/MimeMap
Was sollte es wirklich sein? Was sollte der Code eine gültige Metabasepath zu konstruieren tun?
Hinweis: Ich bin kein Zugriff verweigert Fehler bekommen, ist der Fehler das gleiche, wenn Sie eine ungültige Metabasepath haben, z.B. iis://localhost/SoTiredOfThis
Lösung
Wenn Sie mit dem arbeiten IIS Config Ihrer lokalen Maschine heißt Code und IIS sind auf dem gleichen Feld dann ausreichend ist es zu spezifizieren:
IIS://Localhost/mimemap
Der IIS:
Teil auch als Moniker in OLE parlance bekannt ist.
Wenn Sie die IIS 6-Metabasis-Datei öffnen (C:\Windows\System32\inetsrv\metabase.xml
) finden Sie eine große ‚Blob‘ von XML finden. Dies ist in der Tat eine Baumstruktur abgeflacht.
Pfade in der Metabasis durch Location
Attribute dargestellt werden.
Der Moniker IIS://localhost
Karten auf den Location
Pfad /LM
, die effektiv die Baumwurzel ist.
Der Moniker IIS://localhost/MimeMap
Karten auf den Location
Pfad /LM/MimeMap
.
Wenn Ihr Code die Metabasis auf Remote-Computern Zugriff dann statt Einzelheiten enthält IIS://localhost/[path]
, würde man IIS://[RemoteMachineName]/[path]
angeben. Dies ist, was Chris Crowes Kommentar Mittel.
IIS://localhost/MimeMap
ist auch die Master-Dateityp-Liste. Alle Websites, erben diese Liste (die IIS-Metabasis stark auf vererbte Eigenschaften beruht).
Wenn Sie den MIME-Typs für eine bestimmte Website außer Kraft setzen wollen, dann würden Sie ändern:
IIS://localhost/W3SVC/[iisnumber]/ROOT/MimeMap
Es ist nützlich, die IIS-Metabasis-Datei zu öffnen und eine Grabung hat um zu verstehen, was unter der Haube geht.
Update:
Ihre Frage zu beantworten, warum Sie ein DirectoryEntry
-Objekt erstellen können, wo der Pfad ungültig ist, ist DirectoryEntry
ein Allzweck-Wrapper-Objekt zu binden gegen verschiedene Typen von ADSI-Anbietern wie IIS, LDAP und WinNT verwendet. Es ermöglicht die Schaffung von DirectoryEntry
Objekten, bei denen es nicht unbedingt ein passendes Objekt auf dem Pfad angegeben sein können. Einige ADSI Provider Operationen können diese Fähigkeit benötigen.
Es ist eine statische Methode auf DirectoryEntry
genannt Exists
dass Sie für die Existenz von Objekten Test verwenden. Zum Beispiel:
// Does Default Website exist?
if(DirectoryEntry.Exists("IIS://localhost/w3svc/1"))
{
// Do work...
}
Andere Tipps
Ich habe ein Problem mit dem Erhalten 0x80005000 zurück, wenn sie versuchen, dies zu tun. Die dumme Ursache für mein Problem war, dass ich IIS7 wurde mit und hatte nicht IIS6 Metabasiskompatibilität Unterstützung installiert ist.