Come faccio a manipolare Mapping gestori in modo pulito in IIS7 utilizzando lo spazio Microsoft.Web.Administration?

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

  •  13-09-2019
  •  | 
  •  

Domanda

Quando la manipolazione Mapping gestori utilizzando lo spazio Microsoft.Web.Administration, c'è un modo per rimuovere il <remove name="handler name"> a livello di sito.

Per esempio, ho un sito che eredita tutte le mapping di gestore della configurazione globale mapping di gestore. Nel applicationHost.config tag <location> appare inizialmente come questo:

<location path="60030 - testsite-60030.com">
  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication userName="" />
      </authentication>
    </security>
  </system.webServer>
</location>

Per rimuovere un gestore che uso codice simile a questo:

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);
}

Questo si traduce in tag <location> del sito alla ricerca come:

<location path="60030 - testsite-60030.com">
  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication userName="" />
      </authentication>
    </security>    
    <handlers>
      <remove name="ASPClassic" />
    </handlers>
  </system.webServer>
</location>

Fin qui tutto bene. Tuttavia, se ho ri-aggiungere il gestore ASPClassic questo si traduce in:

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

Ciò può causare un sacco di cruft nel tempo per ogni sito web che ha avuto un gestore rimosso poi ri-aggiunto di programmazione. C'è un modo per rimuovere solo il <remove name="ASPClassic" /> utilizzando il codice namespace Microsoft.Web.Administration?

È stato utile?

Soluzione

Ho parlato con il team del prodotto IIS e questo sembra essere un bug con il sistema di configurazione. Ciò che è più interessante è che quando tento di questo codice su Win7 con IIS 7.5, non riesco nemmeno a ri-aggiungere il gestore di programmazione. Il tentativo di farlo si traduce in un'un'eccezione COM che afferma:

"Errore: Impossibile aggiungere la voce insieme duplicato di tipo 'add' con unico attributo 'name' chiave impostata su 'ASPClassic'"

Che diventa ancora più problematico perché una volta che un utente ha "rimosso" un gestore per una posizione, non può essere ri-aggiunto attraverso la M.W.A. API fino a che questo bug è stato risolto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top