2009-11-04 4 views
3

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?

Répondre

2

J'ai discuté de cela avec l'équipe de produit IIS et cela semble être un bug avec le système de configuration. Ce qui est plus intéressant, c'est que lorsque je tente ce code sur Win7 avec IIS 7.5, je ne peux même pas rajouter le gestionnaire par programmation. Toute tentative de le faire aboutit à une exception COM qui stipule:

« Erreur: Impossible d'ajouter une entrée en double collection de type « ajouter » avec « nom » attribut clé unique défini sur « ASPClassic » »

qui devient encore plus problématique car une fois qu'un utilisateur a "supprimé" un gestionnaire pour un emplacement, il ne peut pas être rajouté via le MWA API jusqu'à ce que ce bug est corrigé.

+0

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

+0

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

+0

@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 –

Questions connexes