Gerardo Contijoch

Experiencias del día a día trabajando con .NET – ASP.NET, C#, ASP.NET MVC y demas…

Como resolver el error ‘It is an error to use a section registered as allowDefinition=’MachineToApplication’ beyond application level.’

Posted by Gerardo Contijoch en febrero 22, 2009

Hoy mientras estaba configurando la autenticación de un site me encontré con este error. Es un tanto críptico, pero no tan difícil de entender si pensamos un poco (y conocemos otro poco). El mensaje básicamente nos esta diciendo que hay una sección de la configuración (en mi caso la sección <authentication>, pero puede ocurrir lo mismo con otras secciones) que esta registrada con un atributo allowDefinition=’MachineToApplication’ y por eso utilizarla más allá del nivel de aplicación no esta permitido.

El archivo web.config de mi aplicación se ve algo así (resumido para mayor claridad):

   1: <?xml version="1.0"?>
   2: <configuration>
   3:     ...
   4:     <location path="Admin">
   5:         <system.web>
   6:             <authentication mode="Forms">
   7:                 <forms loginUrl="Login.aspx" name=".ASPXFORMSAUTH" defaultUrl="~/Inicio.aspx" protection="Validation"/>
   8:             </authentication>
   9:
  10:             <authorization>
  11:                 <deny users="?" />
  12:             </authorization>
  13:         </system.web>
  14:     </location>
  15:     <system.web>
  16:         <authorization>
  17:             <allow users="*" />
  18:         </authorization>
  19:         ...
  20:     </system.web>
  21: </configuration>

Aparente no tiene nada de raro, se configura la autenticación y autorización del site, así como una de las secciones del site (la rama Admin). El error me decía que la linea 6 era la del problema.

Ahora veamos de entender el problema para poder resolverlo.

Si buscamos en nuestro web.config veremos que la sección <authorization> no esta definida en ningún lugar y eso se debe a que la misma esta definida en el archivo machine.config. El mismo se encuentra en el path ‘C:\Windows\Microsoft.NET\Framework\<versión del framework>\CONFIG\machine.config’.

La sección <authentication> se encuentra definida de la siguiente manera:

   1: <configuration>
   2:     <configSections>
   3:         ...
   4:         <sectionGroup name="system.web" type="System.Web.Configuration.SystemWebSectionGroup, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
   5:             ...
   6:             <section name="authentication" type="System.Web.Configuration.AuthenticationSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
   7:             ...
   8:         </sectionGroup>
   9:     </configSections>
  10: </configuration>

Como se puede ver, efectivamente esta sección esta ‘configurada’ para que solo pueda ser utilizada en el machine.config, en el web.config que se encuentra junto con el machine.config o en el web.config que se encuentra en el root de nuestra aplicación (para ver los posibles valores de este atributo y sus significados pueden ir a esta página). Y justamente ese era el problema. En mi web.config la seccion <authentication> estaba siendo utilizada dentro de la sección <location>. Esto es lo mismo que colocarla dentro de un web.config en el directorio especificado en el atributo path de la sección <location> y por eso ASP.NET se quejaba.

Todo se solucionó cuando moví la sección problemática fuera de <location> quedando el web.config de la siguiente manera:

   1: <?xml version="1.0"?>
   2: <configuration>
   3:     <location path="Admin">
   4:         <system.web>
   5:             <authorization>
   6:                 <deny users="?" />
   7:             </authorization>
   8:         </system.web>
   9:     </location>
  10:
  11:     <system.web>
  12:         <authentication mode="Forms">
  13:             <forms loginUrl="Login.aspx" name=".ASPXFORMSAUTH" defaultUrl="~/Inicio.aspx" protection="Validation"/>
  14:         </authentication>
  15:
  16:         <authorization>
  17:             <allow users="*" />
  18:         </authorization>
  19:     </system.web>
  20: </configuration>

La confusión mía estaba en que quería configurar la autenticación dentro de un subdirectorio, cuando en realidad solo tenia que configurar la autorización para ese subdirectorio. La configuración de autenticación se tiene que aplicar a nivel de site y no de subdirectorio, en cambio, la configuración de autenticación si puede ser diferente para distintos subdirectorios.

En esta página pueden encontrar algo mas de información sobre el tema.

Espero que les sea útil.

¡Nos vemos en el próximo post!

Publicado originalmente en https://gerardocontijoch.wordpress.com.

10 comentarios to “Como resolver el error ‘It is an error to use a section registered as allowDefinition=’MachineToApplication’ beyond application level.’”

  1. […] Link al post original (via Codear, pero te lleva al original en la mayoria de los casos) Tomado del Feed de Codear […]

  2. cristian said

    Estimado Gerardo muy buen post!,

    yo estoy teniendo el mismo problemas, pero a diferencia de tu mensaje a mi me lo tira en la linea 26 es decir en

    “”, lo extraño de esto, es que en una pc me funciona perfectamente, y en la otra me tira el error de tu post,

    me gustaría saber si se te ocurre porque esta pasando esto,

    muchas gracias y debajo te copi mi web.config, saludos!

    <!–
    The section enables configuration
    of the security authentication mode used by
    ASP.NET to identify an incoming user.
    –>

    <!–
    The section enables configuration
    of what to do if/when an unhandled error occurs
    during the execution of a request. Specifically,
    it enables developers to configure html error pages
    to be displayed in place of a error stack trace.

    –>

  3. Lamentablemente el contenido del web.config no quedó en el comentario. Imagino que es una limitación de WordPress.
    Intenta postear otra vez el web.config, pero dentro de tags ‘pre’ o ‘code’. Tal vez eso ayude.

  4. Rafael M said

    Muchas gracias; me ha servido bastante tu explicacion

  5. josejuan said

    Estoy realizando un WebSite y en mi maquina corre perfectamente pero cuando lo instalo en un servidor me aparece un error :
    Server Error in ‘/’ Application.
    ——————————————————————————–

    Configuration Error
    Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

    Parser Error Message: It is an error to use a section registered as allowDefinition=’MachineToApplication’ beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

    Source Error:

    Line 18:
    Line 19:
    Line 20:
    Line 21:
    Line 22:

    Source File: c:\inetpub\wwwroot\kpisbft\web.config Line: 20

    Show Additional Configuration Errors:

    It is an error to use a section registered as allowDefinition=’MachineToApplication’ beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS. (c:\inetpub\wwwroot\kpisbft\web.config line 27)
    It is an error to use a section registered as allowDefinition=’MachineToApplication’ beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS. (c:\inetpub\wwwroot\kpisbft\web.config line 28)

    Espero me puedan ayudar por favor.

  6. Saludos!Solo queria decir que lo que expones en tu pagina es a la misma conclusion que he llegado yo.

  7. Fabian said

    Hola! te comento tengo el mismo problema pero en mi caso, la sección authentication no se encuentra adentro del tag location, por lo que no lo pude solucionar al problema.
    En mi web.config principal tengo lo siguiente

    y ademas tengo otros web.config pero unicamente con el siguiente codigo

    por lo que no creo que sea un inconveniente.

    Localmente todo funciona bien, pero cuando lo subo a mi hosting me tira el error en la linea .

    Espero me puedas ayudar, gracias!

  8. Fred said

    Esto tambien puede suceder cuando en el IIS no convertimos la carpeta a una aplicación.

  9. alex0006 said

    En mi caso bastó con eliminar los archivos .suo y .sln de mi aplicación web y luego en Visual Studio lo volví a abrír como sitio web, compilé y funcionó

  10. […] as an application in iis. Me puse a buscar en google y me salio encontre lo siguiente> http://gerardocontijoch.wordpress.co…evel%e2%80%99/ Pero pues yo no tengo definido la etiqueta location en mis archivos… Alguien sabe como puedo […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: