Je joue actuellement avec l'espace de noms Microsoft.Web.Administration (MWA) afin d'ajuster notre application pour configurer IIS 7.5 avec la nouvelle API. J'ai compris que tous les IIS doivent être exprimés dans le fichier suivant (je suis sur Win2K8-R2):
% WINDIR%\System32\inetsrv\config\applicationHost.config
Ainsi, lorsque j'utilise l'objet ServerManager
pour valider les modifications de configuration, le fichier doit être mis à jour en conséquence.
Après avoir ajouté un nouveau type MIME (programmatique avec MWA), je n'ai vu aucune modification dans le applicationHost.config file
, mais je vois le nouveau type MIME dans la fenêtre du gestionnaire IIS et IIS reconnaît ce type MIME sans problème. Même après avoir reformulé le système d'exploitation - Le le fichier de configuration ne contient pas le type MIME nouvellement ajouté, mais la fenêtre du gestionnaire IIS le répertorie.
Parce que mes pools d'applications sont forcés à 32 bits (Enable32BitAppOnWin64 = true
), Je pensais que le fichier de configuration associé devrait se trouver sous %WINDIR%\SysWOW64\inetsrv\Config
, mais (s'il existe ...) - il ne change pas non plus après que le code a validé les mises à jour.
Quelqu'un peut-il expliquer cela? Suis-je en train de manquer quelque chose (en regardant peut-être le mauvais fichier?)? Quelqu'un peut-il faire la lumière sur le SysWOW64\inetsrv\config
répertoire?
Voici mon code pour ajouter le type MIME:
ServerManager manager = new ServerManager();
ConfigurationElementCollection staticContentCollection = manager
.GetApplicationHostConfiguration()
.GetSection("system.webServer/staticContent")
.GetCollection();
//MIMETypes is a string[] array, each object is {FileExt},{MIMETypeStr}
foreach (string pair in MIMETypes)
{
string[] mimeProps = pair.Split(',');
ConfigurationElement mimeTypeEl = staticContentCollection
.Where(a =>
(string)a.Attributes["fileExtension"].Value == mimeProps[0])
.FirstOrDefault();
if (mimeTypeEl != null)
{
staticContentCollection.Remove(mimeTypeEl);
}
ConfigurationElement mimeMapElement =
staticContentCollection.CreateElement("mimeMap");
mimeMapElement["fileExtension"] = mimeProps[0];
mimeMapElement["mimeType"] = mimeProps[1];
staticContentCollection.Add(mimeMapElement);
}
manager.CommitChanges();
//At this point all is working but the config file does not reflect the change
Je viens d'essayer votre code et cela fonctionne très bien. Vous savez que ce type MIME est ajouté à la collection de types MIME globale et non à un site?
Il est également ajouté à la fin de la liste <staticContent>
, Cette liste n'est pas triée de nouveau lorsque vous effectuez ServerManager.CommitChanges()
.
Toujours sous Windows 2008-R2, l'emplacement correct pour applicationHost.config
Est à:
C:\Windows\System32\inetsrv\config
Je suppose que vous utilisez soit notepad.exe ou NotePad2 pour ouvrir ce fichier (les éditeurs 32 bits ne peuvent pas l'ouvrir). Le bloc-notes ne rechargera pas le fichier lors d'une modification et NotePad2 doit être informé d'afficher une notification de modification de fichier (alt-F5), ce qui n'est pas le cas.
Essayez également d'ajouter quelque chose d'inhabituel comme .xxx
, Exécutez votre mise à jour puis ouvrez le fichier de configuration et faites une recherche. Je vous garantis que ce sera là.
Mise à jour:
Suite à vos commentaires ci-dessous, je ne sais pas comment vous pouvez ouvrir applicationHost.config
En utilisant NotePad ++ ou tout autre éditeur 32 bits, je ne peux certainement pas. Pouvez-vous télécharger NotePad2 qui est un éditeur 64 bits:
Le candidat à la sortie fonctionne très bien.
Lors d'une installation par défaut de Windows 64 ou Windows 7 64 bits, il ne devrait pas y avoir de applicationHost.config
Dans le dossier C:\Windows\SysWOW64\inetsrv\Config
. Je ne sais pas pourquoi vous en verriez un là-bas.
Comme solution de contournement pour ouvrir et modifier les fichiers de configuration 64 bits IIS avec votre éditeur 32 bits préféré qui est compatible 64 bits (c.-à-d. Notepad ++), vous pouvez créer un lien symbolique du répertoire Windows qui pointe vers C:\Windows\System32\inetsrv\Config
. Avec cette méthode, vous remplacez le répertoire 32 bits Config
, situé dans C:\Windows\SysWOW64\inetsrv\Config
pour pointer vers la version 64 bits. Si, par exemple, vous avez une application qui nécessite à la fois des versions 32 bits et 64 bits, cette méthode ne fonctionnera pas.
Pour plus d'informations, je vous encourage fortement à visiter ce blog MSDN .