Failed to access IIS metabase

Al abrir un sitio hecho con .NET 2.0 (en nuestro caso con IIS 5.0) aparece el error

Failed to access IIS metabase

con una explicación sobre los permisos del Metabase y un link con el detalle de como modificarlos. Eso afecta sólo a los sitios que utilizan .NET 2.0, mientras que los que están configurados para usar .NET 1.1 en la misma máquina funcionan correctamente.

Causa

Este error aparece generalmente cuando se tiene .NET 1.1 y .NET 2.0 concurrentes en una máquina. Causas complementarias son:

  • El IIS fue instalado después de instalar .NET 2.0.
  • El Metabase efectivamente está sin permisos para el usuario que .NET utiliza (en Windows 2000 es ASPNET).

Lo de los permisos en la Metabase no se refiere únicamente en los permisos de carpeta para acceder a Metabase.xml, sino que a las ACL (Access Control List) que la misma base mantiene.

Como referencia, el Metabase es la fuente de datos para configuración propia del IIS, similar a lo que hace el registro de Windows con el sistema operativo completo. Aquí se almacena el catálogo de directorios virtuales y toda la información que se administra normalmente con la consola de administración de IIS.

El Metabase, además, mantiene los permisos que distintos usuarios tienen para realizar diferentes acciones sobre objetos mantenidos por IIS.

Solución

En nuestro caso la solución fue agregar al usuario ASPNET a los Operadores del Sitio. Esto se hace en la lengüeta Operadores en las propiedades del sitio en la consola de administración de IIS.

Otras soluciones probadas sin éxito pero que sí funcionaron para otros usuarios en Internet son:

  • Reparar la instalación de .NET 2.0: para esto se debe ir a Panel de Control -> Agregar/Quitar Programas-> Microsoft .NET 2.0 y elegir la opción de reparar.
  • Restablecer la configuración interna de .NET 2.0, incluyendo los enlaces con IIS, a través del comando
aspnet_regiis –i

desde C:\WINNT\Microsoft .NET\Framework\v2.0xxxx.

  • Agregar manualmente los permisos al Metabase con el comando
aspnet_regiis -ga ASPNET