La información asociada con el sitio iis no se elimina durante la eliminación mediante programación del sitio

Este artículo le ayuda a resolver el problema en el que la información asociada con el sitio iis no se elimina durante la eliminación mediante programación del sitio.

Versión del producto original:   Internet Information Services 8.0, Internet Information Services 8.5
Número KB original:   3202096

Síntomas

Imagine la siguiente situación:

  • Puede eliminar un sitio mediante llamadas a o a las API administradas appcmd expuestas por Microsoft.Web.Administration binarios.
  • Se crea un nuevo sitio en Internet Information Services (IIS) 7.5 o versiones posteriores.
  • El nuevo sitio todavía usa los metadatos heredados del sitio eliminado.

En este escenario, se produce un comportamiento inesperado al intentar obtener acceso al sitio recién creado. Por ejemplo, puede recibir un mensaje de error HTTP 503 - Servicio no disponible en el explorador web.

Causa

El problema se produce cuando una operación de eliminación de un sitio web existente en IIS se realiza mediante programación mediante el uso o las API y si el sitio tiene propiedades heredadas definidas en el elemento de configuración del archivo ApplicationHost.config del appcmd Microsoft.Web.Administration servidor <CustomMetaData> IIS. La información de la <CustomMetaData> etiqueta que es relevante para el sitio no se elimina en este escenario. Si se crea un nuevo sitio con el mismo identificador después de la operación de eliminación, este nuevo sitio se asociará con las propiedades heredadas del sitio antiguo.

Solución

Puede usar la Consola de administración de IIS para eliminar el sitio web en lugar de realizar llamadas a appcmd o Microsoft.Web.Administration . Este método se asegura de que si hay propiedades heredadas personalizadas asociadas con el sitio web que está intentando eliminar, también se eliminarán del archivo de configuración de IIS (ApplicationHost.config). Esto evitará que estas propiedades se asocien inesperadamente con un nuevo sitio web que cree en el mismo servidor que reutiliza el identificador del sitio eliminado antiguo.

Si debe eliminar el sitio mediante programación por cualquier motivo y no puede usar la Consola de administrador de IIS, puede agregar cualquiera de las dos soluciones alternativas para asegurarse de que también se elimine la información sobre las propiedades heredadas asociadas con el sitio a través del <CustomMetaData> elemento.

Solución alternativa 1: Usar comandos appcmd

Si usa appcmd para eliminar el sitio, puede ejecutar el siguiente comando para quitar las propiedades heredadas que el sitio haya tenido en la configuración de IIS:

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

Nota

Reemplace el parámetro por el identificador del sitio que acaba de <SiteID> eliminar mediante comandos appcmd.

Solución alternativa 2: Usar llamadas a Microsoft.Web.Administration

Si usa llamadas api administradas para eliminar el sitio web, puede agregar el siguiente código después de eliminar el sitio web para borrar también las propiedades heredadas contenidas en el elemento de la configuración de Microsoft.Web.Administration <CustomMetaData> IIS:

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

Nota

La variable site representa el sitio web que acaba de eliminar mediante las Microsoft.Web.Administration API.

Pasos para reproducir

En un Windows 2008 R2 / IIS 7.5 o un servidor Windows 2012 R2 / IIS 8.5:

  1. Instale la característica de compatibilidad de la metabase de IIS 6.

  2. En el administrador de IIS, cree un segundo sitio web: llame a este WebTest y haga que se ejecute en cualquier grupo de aplicaciones deseado.

  3. Abra un símbolo del sistema y vaya a: C:\inetpub\AdminScripts .

  4. Escriba el siguiente comando: adsutil.vbs SET w3svc/2/ServerSize "23" .

    Esto agregará la siguiente sección a la etiqueta W3SVC en el ApplicationHost.config archivo:

    <customMetadata>
    ....
    <key path="LM/W3SVC/2">
    <property id="1018" dataType="DWord" userType="1" attributes="Inherit" value="23" />
    </key>
    ....
    </customMetadata>
    
  5. Ahora vaya al C:\windows\system32\inetsrv\ interior del símbolo del sistema.

  6. Ejecute el comando: appcmd delete site WebTest .

  7. Después de eliminar el sitio, la sección de configuración anterior sigue presente en ApplicationHost.config.