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:

GetObject("IIS://LocalHost/MimeMap") href="http://msdn.microsoft.com/en-us/library/ms752346.aspx" rel="nofollow noreferrer"> Msdn

GetObject("IIS://localhost/mimemap") href="http://support.microsoft.com/kb/246068" rel="nofollow noreferrer"> KB246068

GetObject("IIS://localhost/MimeMap") href="http://www.hanselman.com/blog/ProgrammaticallyAddingMimeTypesToIIS.aspx" rel="nofollow noreferrer"> Scott Hanselman Blog

new DirectoryEntry("IIS://Localhost/MimeMap")) href="https://stackoverflow.com/questions/174888/asp-net-iis6-how-to-search-the-servers-mime-map"> Stack-Überlauf

new DirectoryEntry("IIS://Localhost/MimeMap")) href="https://stackoverflow.com/questions/234526/can-i-setup-an-iis-mime-type-in-net"> Stack-Überlauf

New DirectoryServices.DirectoryEntry("IIS://localhost/MimeMap") href="http://www.velocityreviews.com/forums/t83319-querying-iismimemap-access-is-denied-help.html" rel="nofollow noreferrer"> Velocity Bewertungen


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:

  1. Er fordert iis://localhost/mimemap die Metabasispfad . Welche klingt für mich wie es eine Art " Pfad " ist ein " Metabasis ".
  2. 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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top