Frage

Mit Vista ...

Ich habe ein Skript, das ADSI verwendet Script auf einer IIS-Website zu setzen. Es ist Javascript, innerhalb cscript.exe ausführen, und der Code sieht in etwa wie folgt aus:

var web = GetObject("IIS://localhost/W3SVC/1");
var maps = web.ScriptMaps.toArray();
map[maps.length] = ".aaa,c:\\path\\to\\isapi\\extension.dll,1,GET,POST";
web.ScriptMaps = maps.asDictionary();
web.SetInfo();

Wenn ich in dem IIS-Manager suche nach dem Skript ausgeführt wird, kann ich den neuen Eintrag in der Liste der Handler Mappings sehen. Es hat einen seltsamen Namen „AboMapperCustom-43155“, die ich kommt aus der IIS7 Kompatibilitätsschicht für ADSI verstehen.

Wenn in IIS-Manager, ich dann diese Handler Mappings entfernen, dann einen anderen ADSI-Skript ausführen, um die Script Eigenschaft abgefragt wird, das abgerufenen Script im Skript listet noch den Eintrag, der nur entfernt wurde. Die Ergebnisse in dem ADSI-Skript nicht mit der Liste des „Handler Mappings“ gezeigt im IIS-Manager übereinstimmen.

Dies bleibt auch nach einem Start / Stopp der IISADMIN und W3SVC.

Ist das erwartete Verhalten? ADSI wird als „Kompatibilitätsmodus“ in IIS7 unterstützt. Ist das ein Artefakt, dass?

Ich glaube, dass, wenn die Handler Mapping von IIS-Manager entfernt wird, dann ist es wirklich auch weg, obwohl es wird nach wie vor von einer ADSI-Abfrage zurückgegeben.

Kann jemand eine Klarstellung dieses anbieten?

War es hilfreich?

Lösung

Wenn Sie eine ‚Skriptzuordnung‘ hinzufügen unter Verwendung der ADSI Kompatibilitätsbits (die Standard-Website für die Zwecke des Beweises verwendet wird), fügt diese eine Handler Abbildung auf die applicationHost.config-Datei für die Website unter:

<location path="Default Web Site">
  <system.webServer>
    <handlers>
        <add name="AboMapperCustom-12345678" ... />
    </handlers>
  </system>
</location>

Wenn Sie die Handlerzuordnung im Manager IIS7 löschen, anstatt die Abbildung von der applicationHost.config Datei zu entfernen und der oben gezeigten Abschnitt, eine web.config Datei an die Wurzel der Site mit dem folgenden hinzugefügt:

<configuration>
  <system.webServer>
    <handlers>
        <remove name="AboMapperCustom-12345678" />
    </handlers>
  </system>
</configuration>

Wenn die Konfiguration für eine Website bekommt den neuen verwaltete Microsoft.Web.Administration .NET-API verwenden Sie die Config auf verschiedene Ebenen lesen können, zum Beispiel:

1: Lesen Sie die Konfiguration am applicationHost.config oder APPHOST Ebene

ServerManager serverManager = new ServerManager();
var site = serverManager.Sites.Where(s => s.Id == 1).SingleOrDefault();
Configuration siteConfig = serverManager.GetApplicationHostConfiguration();
ConfigurationSection handlersSection = 
     siteConfig.GetSection("system.webServer/handlers", site.Name);
ConfigurationElementCollection handlersCollection = 
     handlersSection.GetCollection();

foreach (var item in handlersCollection)
{
    Console.WriteLine(item.Attributes["name"].Value);
}

In dem obigen Beispiel, auch wenn Sie die Zuordnung entfernt haben, wird es noch aufgelistet werden, wenn die Handler Mapping Sammlung iterieren. Dies, weil Sie haben für die Konfiguration bei der Anwendung Host-Ebene gefragt. Irgendwelche web.config Dateien, die im Site-Stamm existieren oder darunter nicht gelesen werden und ihre Handler <add/> und <remove/> Richtlinien werden nicht einbezogen werden.

2: Sie können die Konfiguration lesen, die auf eine Website (oder Unterordner in einer Site) spezifisch ist:

ServerManager serverManager = new ServerManager();
Configuration siteConfig = serverManager.GetWebConfiguration("Default Web Site");    
ConfigurationSection handlersSection = 
    siteConfig.GetSection("system.webServer/handlers");
ConfigurationElementCollection handlersCollection = 
    handlersSection.GetCollection();

foreach (var item in handlersCollection)
{
    Console.WriteLine(item.Attributes["name"].Value);
}

Dies wird auch die Website web.config Datei lesen und eine Handler Mapping-Liste zurück, die in den <add/> angegeben für die <remove/> und web.config Richtlinien berücksichtigt.

Dies ist, was die IIS7 Manager-Anwendung zu tun ist, wenn Sie sehen und ändern Handler Mappings. Es ist das Hinzufügen und Entfernen von Handler (falls erforderlich) eine web.config Datei im Stammordner (oder Unterordner) und das Hinzufügen des erforderlichen <add/> und <remove/> auf dieser Ebene zu schaffen.

Die IIS6 Kompatibilitätsschicht erscheint am applicationHost.config APPHOST Ebene (Option 1 oben) allein zu betreiben, weshalb man diese Unterschiede ist zu sehen.

Ist es ein Fehler? Ich bin mir nicht sicher, dass es ist, weil letztlich ADSI wurde nie an erster Stelle bewusst web.config. Auch würde MS haben eine neue Methode oder Flag hinzuzufügen, damit Sie auf dem angeben Ebene Sie wirklich diese ‚Skriptzuordnung‘ Änderungen vornehmen wollen, und das kann bedeuten, zu brechen und das Testen der ADSI-Komponenten, die wiederum einführen Bugs. Das Verhalten ist es zu simulieren, die alte IIS6 Metabasis ändern und applicationHost.config ist in der Tat analog zu der Metabasis so könnte man argumentieren, zu Recht oder zu Unrecht, es ist das Richtige zu tun.

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