IIS: Comment obtenir le chemin de la Métabase?
je vais essayer d'obtenir la liste des types mime connu à un serveur IIS (vous pouvez les voir a demandé et et a répondu par moi il y a 2 ans). Le copier-collé réponse implique:
GetObject("IIS://LocalHost/MimeMap")
msdn
GetObject("IIS://localhost/mimemap")
KB246068
GetObject("IIS://localhost/MimeMap")
Scott, Hanselman Blog
new DirectoryEntry("IIS://Localhost/MimeMap"))
Un Débordement De Pile
new DirectoryEntry("IIS://Localhost/MimeMap"))
Un Débordement De Pile
New DirectoryServices.DirectoryEntry("IIS://localhost/MimeMap")
Vitesse Examens
Vous obtenez 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 l'est pas.
Le seul indice que je peux trouver pourquoi il échoue, à partir 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:
- Il appelle
iis://localhost/mimemap
la Chemin de la Métabase. Qui sonne pour moi comme il est une sorte de "chemin" à un "métabase". - Il dit que la chemin à la métabase pourrait être quelque chose d'autre; et il donne un exemple de ce que cela pourrait être.
Droit maintenant, moi, et l'ensemble de la planète, sont figées "MetabasePath" comme
iis://localhost/MimeMap
Que doit-il vraiment? Ce que le code devrait-il faire pour construire un valide MetabasePath?
Note: je ne suis pas une erreur d'accès refusé, l'erreur est la même lorsque vous avez un invalide MetabasePath, par exemple iis://localhost/SoTiredOfThis
Ce n'est pas une exception de sécurité. L'appel à
DirectoryEntry(MetabasePath)
retourne bien, et elle renvoie un objet. Vient l'erreur suivant lorsque vous essayez d'accéder à toute de retour de la DirectoryEntry
propriétés de l'objet. Ils donnent tous une COM "indéterminée" erreur. Cela se produit lorsque le chemin n'est pas valide, par exemple "iis://localhost/asdfadsf
"voir la mise à jour de ma réponse.
J'ai modifié ma réponse un peu.
Cela devrait-il être sur le Serveur Faute?
OriginalL'auteur Ian Boyd | 2010-04-26
Vous devez vous connecter pour publier un commentaire.
Si vous travaillez avec IIS config de votre machine locale, c'est à dire votre code et IIS sont de la même zone, alors il suffit d'indiquer:
IIS://Localhost/mimemap
La
IIS:
partie est également connu comme un surnom dans le OLE de langage.Si vous ouvrez le IIS6 fichier de la métabase (
C:\Windows\System32\inetsrv\metabase.xml
), vous trouverez un grand "blob" de XML. C'est en fait un aplatissement de la structure en arborescence.Chemins dans la métabase sont représentés par
Location
attributs.Le surnom de
IIS://localhost
cartes à laLocation
chemin/LM
qui est en fait la racine de l'arbre.Le surnom de
IIS://localhost/MimeMap
cartes à laLocation
chemin/LM/MimeMap
.Si votre code est accéder à la métabase sur des machines distantes puis, au lieu de spécifier des
IIS://localhost/[path]
, on pourrait spécifierIIS://[RemoteMachineName]/[path]
. C'est ce que Chris Crowes commentaire moyens.IIS://localhost/MimeMap
est aussi le maître de la liste des types Mime. Tous les sites hériter de cette liste (la Métabase IIS s'appuie fortement sur les propriétés héritées).Si vous vouliez remplacer les types Mime pour un site spécifique, vous devez modifier:
IIS://localhost/W3SVC/[iisnumber]/ROOT/MimeMap
Il est utile d'ouvrir le fichier de la métabase IIS et un de creuser autour pour comprendre ce qui se passe sous le capot.
Mise à jour:
Pour répondre à votre question au sujet de pourquoi vous pouvez créer un
DirectoryEntry
objet où le chemin n'est pas valide,DirectoryEntry
est d'un usage général, objet wrapper permet de lier contre les différents types de fournisseurs ADSI (IIS, LDAP et WinNT. Il permet aussi la création deDirectoryEntry
objets où il ne peut pas nécessairement être un objet correspondant au chemin d'accès spécifié. Certains fournisseur ADSI opérations peuvent exiger de cette capacité.Il y a une méthode statique sur
DirectoryEntry
appeléExiste
que vous pouvez utiliser pour tester l'existence des objets. Par exemple:merci 🙂 - Un de mes one-trick-poneys est écrit IIS 5/6/7 d'approvisionnement et de gestion des systèmes, de sorte que j'ai été plongé dans la métabase alchimie depuis quelques années maintenant.
l'un quelconque de cette aide?
je ne peux pas dire. Les développeurs qui ont été à l'origine du problème dit qu'il fixe lui-même spontanément; et comme par magie ils accès
iis://localhost/MimeMap
. Il ne semble pas être une raison pour laquelle ils ne seraient pas en mesure d'accéder à la maîtrise de type mime liste; à moins que le fichier n'existe pas physiquement. Mais je pense que IIS créer le fichier en tant que de besoin. Mais encore plus bewilderingly est le fait que il a soudainement commencé à travailler. j'ai vu les exceptions moi-même (donc pas d'erreur lors de la création d'objets, mais erreur lors de l'accès) - de sorte qu'ils ne sont pas fous.+1 pour
C:\Windows\System32\inetsrv\metabase.xml
seul. Qui a débloqué un certain nombre de mystérieux paramètres du chemin d'accès pour moi. CheersOriginalL'auteur Kev
J'ai eu un problème avec l'obtention 0 x 80005000 retourné lorsque vous tentez de le faire. Le stupide cause de mon problème est que j'ai été en utilisant IIS7 et n'avais pas installé IIS6 compatibilité de la métabase de soutien.
OriginalL'auteur David Knight