Comment puis-je manipuler proprement Mappages dans IIS7 en utilisant l'espace de noms Microsoft.Web.Administration?

StackOverflow https://stackoverflow.com/questions/1671702

  •  13-09-2019
  •  | 
  •  

Question

Lors de la manipulation Mappages en utilisant l'espace de noms Microsoft.Web.Administration, est-il un moyen d'enlever le <remove name="handler name"> au niveau du site.

Par exemple, j'ai un site qui hérite de toutes les applications de gestionnaire de la configuration globale de mappage de gestionnaire. En applicationHost.config la balise <location> ressemble d'abord à ceci:

<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 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'à présent, si bon. Toutefois, si j'ajouter à nouveau le gestionnaire de ASPClassic il en résulte:

<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. Y at-il un moyen de supprimer juste le <remove name="ASPClassic" /> en utilisant le code d'espace de noms Microsoft.Web.Administration?

Était-ce utile?

La solution

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

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

Cela devient encore plus problématique, car une fois qu'un utilisateur a « retiré » un gestionnaire pour un emplacement, il ne peut pas être re-ajoutée par l'M.W.A. API jusqu'à ce bug est corrigé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top