Lors de la manipulation des mappages de gestionnaires à l'aide de l'espace de noms Microsoft.Web.Administration
, existe-t-il un moyen de supprimer le <remove name="handler name">
au niveau du site. Par exemple, j'ai un site qui hérite de tous les mappages de gestionnaires de la configuration des mappages de gestionnaires globaux. Dans applicationHost.config
la balise <location>
ressemble d'abord à ceci:Comment manipuler proprement les mappages de gestionnaire dans IIS7 à l'aide de l'espace de noms Microsoft.Web.Administration?
<location path="60030 - testsite-60030.com">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication userName="" />
</authentication>
</security>
</system.webServer>
</location>
Pour supprimer un gestionnaire j'utiliser un code similaire à ceci:
string siteName = "60030 - testsite-60030.com";
string handlerToRemove = "ASPClassic";
using(ServerManager sm = new ServerManager())
{
Configuration siteConfig =
serverManager.GetApplicationHostConfiguration();
ConfigurationSection handlersSection =
siteConfig.GetSection("system.webServer/handlers", siteName);
ConfigurationElementCollection handlersCollection =
handlersSection.GetCollection();
ConfigurationElement handlerElement = handlersCollection
.Where(h => h["name"].Equals(handlerMapping.Name)).Single();
handlersCollection.Remove(handlerElement);
}
Il en résulte dans la balise <location>
du site ressemblant à:
<location path="60030 - testsite-60030.com">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication userName="" />
</authentication>
</security>
<handlers>
<remove name="ASPClassic" />
</handlers>
</system.webServer>
</location>
Jusqu'ici tout va bien. Toutefois, si j'ajouter à nouveau le gestionnaire ASPClassic
ce résultat dans:
<location path="60030 - testsite-60030.com">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication userName="" />
</authentication>
</security>
<handlers>
<remove name="ASPClassic" />
<add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="File" />
</handlers>
</system.webServer>
</location>
Cela peut entraîner beaucoup de cochonneries au fil du temps pour chaque site Web qui a un gestionnaire enlevé puis rajoutées par programme. Est-il un moyen de simplement supprimer le <remove name="ASPClassic" />
en utilisant le code de l'espace de noms Microsoft.Web.Administration?
Merci pour la réponse Tobin, maintenant je sais que je ne suis pas le seul à être difficile à ce sujet. Cela vaut-il la peine d'ouvrir un problème sur Microsoft Connect? – Kev
Oui. Je dirais aller de l'avant et l'ouvrir. L'équipe en est déjà consciente, mais cela vaut la peine de mettre Connect pour le suivi. – tobint
@Kev, Salut, j'essaie également de faire quelque chose de similaire, en essayant de supprimer le mappage de gestionnaire d'un site Web dans IIS7 en utilisant WMI. Le code semble fonctionner correctement, mais le mappage du gestionnaire n'est jamais supprimé. comme je peux le voir inetmgr après le retrait. Veuillez vérifier ceci: http://stackoverflow.com/questions/7102056/how-to-remove-handler-mapping-from-a-website-in-iis7-using-wmi-and-c-vb-net –