Question

Je suis en train d'obtenir la liste des types MIME connus à un serveur IIS ( que vous pouvez voir et on m'a demandé et répondu par moi il y a 2 ans ). La réponse collée copie implique:

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 de 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"> Commentaires Velocity


Vous avez l'idée. Tout le monde est d'accord que vous utilisez un chemin magique iis: // localhost / MimeMap . Et cela fonctionne très bien, sauf pour les moments où il ne fonctionne pas.

Le seul indice que je peux trouver la raison pour laquelle il échoue, est d'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);

Il y a deux indices ici:

  1. He appels iis://localhost/mimemap Chemin de la métabase . Ce qui me semble qu'il est une sorte de " chemin " à un " métabase ".
  2. Il dit que le chemin métabase pourrait être autre chose; et il donne un exemple de ce qu'il pourrait être.

En ce moment i, et la planète entière, sont hardcoding la " Metabasepath " comme

iis://localhost/MimeMap

Que faut-il vraiment? Qu'est-ce que le code devrait faire pour construire une Metabasepath valide?


Note: Je ne reçois pas une erreur de refus d'accès, l'erreur est la même lorsque vous avez un Metabasepath non valide, par exemple iis://localhost/SoTiredOfThis

Était-ce utile?

La solution

Si vous travaillez avec IIS config de votre machine locale à savoir votre code et IIS sont sur la même case, puis il suffit d'indiquer:

IIS://Localhost/mimemap

La partie de IIS: est également connu comme un surnom dans le langage OLE.

Si vous ouvrez le fichier métabase IIS6 (de C:\Windows\System32\inetsrv\metabase.xml), vous trouverez un grand « blob » de XML. Ceci est en fait une aplatis structure arborescente.

Les chemins du métabase sont représentés par des attributs Location.

Le sobriquet IIS://localhost cartes sur le chemin de Location /LM qui est effectivement la racine de l'arbre.

Les cartes IIS://localhost/MimeMap moniker au chemin de Location /LM/MimeMap.

Si votre code accède à la métabase sur des machines distantes alors au lieu de specifiying IIS://localhost/[path], on précise IIS://[RemoteMachineName]/[path]. C'est ce que signifie de commentaire Chris Crowes.

IIS://localhost/MimeMap est également le maître Mime liste type. Tous les sites hériteront de cette liste (la métabase IIS repose en grande partie sur les propriétés héritées).

Si vous voulez remplacer les types Mime pour un site spécifique, vous souhaitez modifier:

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

Il est utile d'ouvrir le fichier IIS métabase et une fouille autour de comprendre ce qui se passe sous le capot.

Mise à jour:

Pour répondre à votre question de savoir pourquoi vous pouvez créer un objet DirectoryEntry où le chemin est invalide, DirectoryEntry est un objet d'emballage à usage général utilisé pour lier contre différents types de fournisseurs ADSI tels que IIS, LDAP et Windows NT. Il permet la création d'objets DirectoryEntry où il peut ne pas être nécessairement un objet correspondant au chemin d'accès spécifié. Certaines opérations de fournisseur ADSI peut exiger cette capacité.

Il existe une méthode statique sur DirectoryEntry appelé Exists que vous pouvez utiliser pour tester l'existence d'objets. Par exemple:

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

Autres conseils

J'avais un problème à obtenir 0x80005000 retourné en essayant de le faire. La cause stupide de mon problème était que j'utilisais IIS7 et n'avait pas installé le soutien de la compatibilité de métabase IIS6.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top