Domanda

Sto cercando di ottenere l'elenco dei tipi MIME noti a un server IIS (, che si può vedere è stato chiesto e risposto e da me 2 anni fa ). La risposta copia-incollato comporta:

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"> Blog di Scott Hanselman

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

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

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


Si ottiene l'idea. Tutti sono d'accordo che si utilizza un percorso magico IIS: // localhost / MimeMap . E questo funziona alla grande, tranne che per i tempi in cui non è così.

L'unico indizio posso trovare il motivo per cui non riesce, è da un IIS MVP, Chris Crowe, 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);

Ci sono due indizi qui:

    chiamate
  1. He iis://localhost/mimemap il Percorso metabase . Il che suona per me come se fosse una sorta di " path " ad un " metabase ".
  2. Egli dice che il percorso di al metabase potrebbe essere qualcosa d'altro; e dà un esempio di quello che potrebbe essere come.

In questo momento io, e l'intero pianeta, stanno hardcoding il " Metabasepath ", come

iis://localhost/MimeMap

Quello che dovrebbe davvero essere? Quale dovrebbe essere il codice facendo per costruire una valida Metabasepath?


Nota: Non ricevo un errore di accesso negato, l'errore è lo stesso quando si ha un Metabasepath non valida, ad esempio, iis://localhost/SoTiredOfThis

È stato utile?

Soluzione

Se si sta lavorando con l'IIS di configurazione della macchina locale vale a dire il codice e IIS sono sulla stessa macchina, allora è sufficiente specificare:

IIS://Localhost/mimemap

La porzione IIS: è anche conosciuto come un moniker nel gergo OLE.

Se si apre il file IIS6 metabase (C:\Windows\System32\inetsrv\metabase.xml) troverete un grande 'blob' di XML. Questo è in realtà una appiattito fuori struttura ad albero.

I percorsi nella metabase sono rappresentati da attributi Location.

Il IIS://localhost moniker associato al percorso Location /LM che è effettivamente la radice dell'albero.

Il IIS://localhost/MimeMap moniker associato al percorso Location /LM/MimeMap.

Se il codice accede al metabase su macchine remote allora invece di specifiying IIS://localhost/[path], si specificherà IIS://[RemoteMachineName]/[path]. Questo è ciò che significa commento Chris Crowes.

IIS://localhost/MimeMap è anche il padrone Tipo Mime lista. Tutti i siti ereditano questa lista (metabase IIS si basa molto sulle proprietà ereditate).

Se si voleva sostituire i tipi MIME per un sito specifico, allora devi modificare:

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

E 'utile per aprire il file di IIS metabase e hanno uno scavo intorno per capire cosa sta succedendo sotto il cofano motore.

Aggiornamento:

Per rispondere alla tua domanda sul perché è possibile creare un oggetto DirectoryEntry dove il percorso non è valido, DirectoryEntry è un oggetto di uso generale involucro utilizzato per legare contro diversi tipi di provider ADSI come IIS, LDAP e WinNT. Permette creazione di oggetti DirectoryEntry dove non può essere necessariamente un oggetto corrispondente al percorso specificato. Alcune operazioni provider ADSI possono richiedere questa capacità.

C'è un metodo statico su DirectoryEntry chiamato Exists che è possibile utilizzare per verificare l'esistenza di oggetti. Ad esempio:

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

Altri suggerimenti

I stava avendo un problema con ottenere 0x80005000 restituito quando si cerca di fare questo. La causa stupido del mio problema era che stavo usando IIS7 e non avevo installato supporto di compatibilità metabase IIS6.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top