Freigeben über


Informationen, die der IIS-Website zugeordnet sind, werden während der programmgesteuerten Websitelöschung nicht gelöscht.

Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem Informationen, die der IIS-Website zugeordnet sind, während der programmgesteuerten Websitelöschung nicht gelöscht werden.

Ursprüngliche Produktversion: Internetinformationsdienste
Ursprüngliche KB-Nummer: 3202096

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie löschen eine Website mithilfe von Aufrufen appcmd oder verwalteten APIs, die von Microsoft.Web.Administration der Binärdatei verfügbar gemacht werden.
  • Sie erstellen eine neue Website in Internetinformationsdienste (IIS).
  • 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. So erhalten Sie beispielsweise 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 appcmd oder Microsoft.Web.Administration APIs ausgeführt wird und wenn die Website legacy-Eigenschaften im <CustomMetaData> Konfigurationselement der Datei ApplicationHost.config des IIS-Servers definiert hat. Die Informationen im <CustomMetaData> Tag, die für die Website relevant sind, 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 Anrufe an appcmd oder Microsoft.Web.Administrationauszuführen. Diese Methode stellt sicher, dass sie auch aus der IIS-Konfigurationsdatei (ApplicationHost.config) gelöscht werden, wenn benutzerdefinierte Legacyeigenschaften der Website zugeordnet sind, die Sie löschen möchten. Dieses Verhalten verhindert, dass diese Eigenschaften unerwartet einer neuen Website zugeordnet werden, die Sie auf demselben Server erstellen, der die ID der alten gelöschten Website wiederverwendet.

Wenn Sie die Website aus irgendeinem Grund programmgesteuert löschen 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 älteren Eigenschaften, die der Website über das <CustomMetaData> Element zugeordnet sind, ebenfalls gelöscht werden.

Problemumgehung 1: Verwenden von Appcmd-Befehlen

Wenn Sie appcmd die Website löschen, können Sie dann den folgenden Befehl ausführen, um alle Legacyeigenschaften zu entfernen, die die Website möglicherweise in der IIS-Konfiguration hat:

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

Notiz

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 legacy-Eigenschaften <CustomMetaData> im Element der IIS-Konfiguration zu löschen:

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

Notiz

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

Schritte zum Reproduzieren

Auf einem Windows 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 sie für alle gewünschten Anwendungspools aus.

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

  4. Geben Sie den Befehl adsutil.vbs SET w3svc/2/ServerSize "23" ein, um dem W3SVC-Tag in der Datei ApplicationHost.config den folgenden Abschnitt hinzuzufügen:

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

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

  7. Nachdem die Website gelöscht wurde, befindet sich der Abschnitt der Konfiguration noch in ApplicationHost.config.