Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 vonMicrosoft.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.Administration
auszufü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:
Installieren Sie das IIS 6-Metabasiskompatibilitätsfeature.
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.
Öffnen Sie eine Eingabeaufforderung in der Befehlszeile, und navigieren Sie zu:
C:\inetpub\AdminScripts
.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>
Navigieren Sie zur
C:\windows\system32\inetsrv\
Eingabeaufforderung innerhalb der Eingabeaufforderung.Führen Sie den Befehl
appcmd delete site WebTest
aus.Nachdem die Website gelöscht wurde, befindet sich der Abschnitt der Konfiguration noch in ApplicationHost.config.