Wie manipuliere ich Handler -Zuordnungen in IIS7 mithilfe des Namespace von Microsoft.Web.administration?

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

  •  13-09-2019
  •  | 
  •  

Frage

Beim Manipulieren von Handlerzuordnungen mit dem Microsoft.Web.Administration Namespace, gibt es eine Möglichkeit, die zu entfernen <remove name="handler name"> auf Standortebene.

Zum Beispiel habe ich eine Site, die alle Handler -Zuordnungen der Global Handler Mappings -Konfiguration erbt. Im applicationHost.config das <location> Tag sieht zunächst so aus:

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

Um einen Handler zu entfernen, verwende ich einen ähnlichen Code wie:

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

Dies führt zu der Website der Website <location> Tag aussieht wie:

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

So weit, ist es gut. Wenn ich jedoch neu anzugehe ASPClassic Handler Dies führt zu:

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

Dies kann im Laufe der Zeit für jede Website, auf der ein Handler entfernt wurde, im Laufe der Zeit zu viel Kreuzer führen und programmgesteuert neu angepasst. Gibt es eine Möglichkeit, das einfach zu entfernen? <remove name="ASPClassic" /> Verwenden Sie den Namespace -Code von Microsoft.Web.administration?

War es hilfreich?

Lösung

Ich habe dies mit dem IIS -Produktteam besprochen, und dies scheint ein Fehler mit dem Konfigurationssystem zu sein. Interessanter ist, dass ich, wenn ich diesen Code auf Win7 mit IIS 7.5 versuche, den Handler nicht einmal programmgesteuert neu anpassen kann. Der Versuch, dies zu tun, führt zu einer COM -Ausnahme, in der lautet:

"ERROR: Mit eindeutigem Schlüsselattribut 'Name', der auf 'Aspclassic' gesetzt ist, kann nicht doppelte Sammlung eingeben."

Das wird noch problematischer, da ein Benutzer einen Handler für einen Ort "entfernt" hat, er kann erst durch die Behebung dieses Fehlers durch die MWA-API neu angepasst werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top