Der IIS-Website zugeordnete Informationen werden während der programmgesteuerten Websitelöschung nicht gelöscht.

Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem Informationen, die mit der IIS-Website verknüpft sind, während des programmgesteuerten Websitelöschvorgangs nicht gelöscht werden.

Ursprüngliche Produktversion:   Internetinformationsdienste 8.0, Internetinformationsdienste 8.5
Ursprüngliche KB-Nummer:   3202096

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie löschen eine Website mithilfe von Aufrufen an appcmd oder an die verwalteten APIs, die binär verfügbar gemacht Microsoft.Web.Administration werden.
  • Sie erstellen eine neue Website in Internetinformationsdienste (IIS) 7.5 oder höher.
  • Die neue Website verwendet weiterhin die Legacymetadaten der gelöschten Website.

In diesem Szenario tritt unerwartetes Verhalten auf, wenn Sie versuchen, auf die neu erstellte Website zuzugreifen. Beispielsweise erhalten Sie möglicherweise eine Fehlermeldung "HTTP 503 – Dienst nicht verfügbar" in Ihrem Webbrowser.

Ursache

Das Problem tritt auf, wenn ein Löschvorgang für eine vorhandene Website in IIS programmgesteuert mithilfe oder APIs ausgeführt wird appcmd und wenn für die Website Microsoft.Web.Administration Legacyeigenschaften im <CustomMetaData> Konfigurationselement der ApplicationHost.config-Datei des IIS-Servers definiert sind. Die Für die Website relevanten Informationen im <CustomMetaData> Tag werden in diesem Szenario nicht gelöscht. Wenn nach dem Löschvorgang eine neue Website mit derselben ID erstellt wird, wird diese neue Website den älteren Eigenschaften der alten Website zugeordnet.

Lösung

Sie können die IIS-Verwaltungskonsole verwenden, um die Website zu löschen, anstatt Aufrufe an appcmd oder Microsoft.Web.Administration auszuführen. Mit dieser Methode wird sichergestellt, dass benutzerdefinierte Legacyeigenschaften, die mit der Website verknüpft sind, die Sie löschen möchten, auch aus der IIS-Konfigurationsdatei (ApplicationHost.config) gelöscht werden. Dadurch wird verhindert, dass diese Eigenschaften unerwartet einer neuen Website zugeordnet werden, die Sie auf demselben Server erstellen, auf dem die ID der alten gelöschten Website wiederverwendet wird.

Wenn Sie die Website aus irgendeinem Grund programmgesteuert löschen müssen und die IIS-Manager-Konsole nicht verwenden können, können Sie eine der beiden Problemumgehungen hinzufügen, um sicherzustellen, dass die Informationen zu den Legacyeigenschaften, die der Website über das Element zugeordnet sind, <CustomMetaData> ebenfalls gelöscht werden.

Problemumgehung 1: Verwenden von appcmd-Befehlen

Wenn Sie appcmd zum Löschen der Website verwenden, können Sie den folgenden Befehl ausführen, um alle älteren Eigenschaften zu entfernen, die die Website möglicherweise in der IIS-Konfiguration hatte:

Appcmd clear config -section:customMetadata -[path='LM/W3SVC/<SiteID>']

Hinweis

Ersetzen Sie den <SiteID> Parameter durch den Bezeichner der Website, die Sie soeben mithilfe von appcmd-Befehlen gelöscht haben.

Problemumgehung 2: Verwenden von Aufrufen von Microsoft.Web.Administration

Wenn Sie verwaltete API-Aufrufe Microsoft.Web.Administration zum Löschen der Website verwenden, können Sie den folgenden Code hinzufügen, nachdem die Website gelöscht wurde, um auch die Legacyeigenschaften zu löschen, die im Element der <CustomMetaData> IIS-Konfiguration enthalten sind:

string path = "LM/W3SVC/" + site.Id.ToString(CultureInfo.InvariantCulture);
string pathWithSlash = path + "/";
for (int i = customMetadata.Count - 1; i >= 0; i--) {
    ConfigurationElement metadata = customMetadata[i];
    string key = (string)metadata["path"];
    if (key != null &&
    (
        key.Equals(path, StringComparison.OrdinalIgnoreCase) || 
        key.StartsWith(pathWithSlash, StringComparison.OrdinalIgnoreCase))
    ) 
    {
        customMetadata.RemoveAt(i);
    }
}

Hinweis

Die Variable site stellt die Website dar, die Sie soeben mithilfe der APIs gelöscht Microsoft.Web.Administration haben.

Schritte zum Reproduzieren

Auf einem Windows 2008 R2 / IIS 7.5 oder einem Windows 2012 R2 / IIS 8.5 Server:

  1. Installieren Sie das IIS 6-Metabasiskompatibilitätsfeature.

  2. Erstellen Sie im IIS-Manager eine zweite Website: Rufen Sie diesen WebTest auf, und führen Sie ihn in einem beliebigen Anwendungspool aus.

  3. Öffnen Sie eine Eingabeaufforderung, und navigieren Sie zu: C:\inetpub\AdminScripts .

  4. Geben Sie den folgenden Befehl ein: adsutil.vbs SET w3svc/2/ServerSize "23" .

    Dadurch wird der folgende Abschnitt zum W3SVC-Tag in der ApplicationHost.config Datei hinzugefügt:

    <customMetadata>
    ....
    <key path="LM/W3SVC/2">
    <property id="1018" dataType="DWord" userType="1" attributes="Inherit" value="23" />
    </key>
    ....
    </customMetadata>
    
  5. Navigieren Sie nun zur C:\windows\system32\inetsrv\ Eingabeaufforderung.

  6. Führen Sie den Befehl aus: appcmd delete site WebTest .

  7. Nachdem die Website gelöscht wurde, ist der oben aufgeführte Konfigurationsabschnitt in ApplicationHost.config noch vorhanden.