Es incorrecto utilizar una sección registrada como allowDefinition=’MachineToApplication’ mas allá del nivel de aplicación

En Plain Concepts estamos colaborando con Microsoft en el programa Emprendia.  


¿Que qué es Emprendia?


Pues Emprendia nace como una iniciativa de ayuda dirigida a emprendedores que quieren hacer realidad una idea y desarrollar un proyecto empresarial.


Tenéis más información aquí: http://www.microsoft.com/spanish/msdn/enterprising/default.mspx


Recientemente nos llegó una pregunta de unos de los participantes en el programa que se estaban encontrando con el problema que pongo en el título del Post.


Este problema es un viejo conocido. Quede aquí para personas que se encuentre con este problema en el futuro.


Este error ocurre principalmente en 2 escenarios.



1.- Si creamos una nueva aplicación usando Visual Studio .NET 2002 o 2003, automáticamente crea un directorio virtual y lo configura como una aplicación. Sin embargo, si creamos el directorio virtual de forma manual y no está configurado como una aplicación, no seremos capaces de ejecutar la aplicación y obtendremos el error del título.



Para resolverlo, simplemente tenemos que hacer click con el botón derecho en el directorio virtual para ver sus propiedades, y hacer click en “Crear” para crear una nueva aplicación. Automáticamente creará una aplicación usando el nombre del directorio virtual y ya podremos acceder sin problemas.



2.- Cuando tenemos subdirectorio en la aplicación, podemos tener ficheros web.config para cada subdirectorio. Pero…, hay ciertas propiedades que no se pueden establecer en el fichero de configuración de un subdirectorio como por ejemplo la autenticación, la gestión del estado de la sesión (podremos ver que el mensaje de error muestra el número de línea donde declaramos la autenticación o el estado de la sesión en el web.config del subdirectorio). La razón es que estos parámetros de configuración no se pueden sobreescribir a nivel de subdirectorio a menos que el subdirectorio esté configurado también como una aplicación (como comentaba en el punto anterior).


A veces tenemos la tendencia de añadir ficheros web.config en los subdirectorio si queremos proteger el acceso a los ficheros de ese subdirectorio (un caso muy típico, el directorio es “admin” y queremos denegar el acceso a las páginas de administración a usuarios no autorizados).


Esto mismo se puede hacer usando el web.config a nivel de raíz de la aplicación, indicando la localización de aquello que queremos configurar:


<location path=Admin>
  <
system.web>
    <
authorization>
      <
allow roles=administradores />
      <
deny users=* />
    </
authorization>
  </
system.web>
</
location>

Si esto mismo lo quisiesemos hacer en el subdirectorio, lo haríamos así:


<configuration>
  <
system.web>
    <
authorization>
      <
allow roles=administradores />
      <
deny users=* />
    </
authorization>
  </
system.web>
</
configuration>