27 votes

Le fichier applicationHost.config de IIS 7.5 n'est pas mis à jour

Je suis actuellement en train de jouer 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 changements au niveau de IIS doivent être exprimés dans le fichier suivant (je suis sur Win2K8-R2) :

%WINDIR%\\System32\\inetsrv\\config\\applicationHost.config

Ainsi, lorsque j'utilise la fonction ServerManager pour valider les changements de configuration, le fichier doit être mis à jour en conséquence.

Après avoir ajouté un nouveau type de MIME (programmatique avec MWA), je n'ai vu aucun changement dans le fichier 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 redémarré le système d'exploitation, le fichier de configuration ne contient pas le nouveau type MIME, mais la fenêtre du gestionnaire IIS le mentionne.

Parce que mes pools d'applications sont contraints de fonctionner en 32 bits ( Enable32BitAppOnWin64 = true ), j'ai pensé que le fichier de configuration correspondant devait être situé sous %WINDIR%\SysWOW64\inetsrv\Config mais (si elle existe...) - elle ne change pas non plus après la validation des mises à jour par le code.

Quelqu'un peut-il expliquer cela ? Est-ce que j'ai raté quelque chose (en regardant le mauvais fichier peut-être ?)? Quelqu'un peut-il m'éclairer 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

23voto

Kev Points 60744

Je viens d'essayer votre code et il fonctionne correctement. Vous savez que ce type de mime est ajouté à la collection globale de types de mime et non à un site ?

Il est également ajouté à la fin du <staticContent> cette liste n'est pas re-triée lorsque vous faites un ServerManager.CommitChanges() .

De même, sous Windows 2008-R2, l'emplacement correct de l'option applicationHost.config est à :

C:\\Windows\\System32\\inetsrv\\config

Je suppose que vous utilisez notepad.exe ou NotePad2 pour ouvrir ce fichier (les éditeurs 32 bits ne peuvent pas l'ouvrir). Notepad ne rechargera pas le fichier en cas de modification et NotePad2 doit être invité à afficher une notification de modification de fichier (alt-F5), ce qu'il ne fait pas d'office.

Essayez également d'ajouter quelque chose d'inhabituel comme .xxx Lancez votre mise à jour, puis ouvrez le fichier de configuration et faites une recherche. Je vous garantis qu'il y sera.

Mise à jour :

Suite à vos commentaires ci-dessous, je ne sais pas comment vous avez pu 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 :

http://www.flos-freeware.ch/notepad2.html

La version candidate fonctionne parfaitement.

Sur une installation par défaut de Windows 2008 ou Windows 7 64 bits, il ne devrait pas y avoir d'erreur d'installation. applicationHost.config dans le C:\Windows\SysWOW64\inetsrv\Config dossier. Je ne sais pas pourquoi vous en voyez un dans ce dossier.

2voto

user717236 Points 1402

Pour ouvrir et modifier les fichiers de configuration IIS 64 bits avec votre éditeur 32 bits favori compatible 64 bits (c'est-à-dire Notepad++), vous pouvez créer un lien symbolique dans le répertoire Windows qui pointe vers C:\Windows\System32\inetsrv\Config . Avec cette méthode, vous êtes remplacer les 32 bits Config situé à l'adresse suivante 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 vivement à consulter le site suivant ce blog MSDN .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X