Despues de subir un sitio web a un alojamiento con plesk 9.5 en windows, te puedes encontrar con sorpresas nada agradables.
Lo habitual es que de entrada los permisos en el directorio web de ese alojamiento no sean “correctos”, correctos para este software significa que tendremos que asignar permisos totales a los usuarios con los que se ejecuta ASP.NET en el servidor, asi como el usuario con el que funciona el pool de aplicaciones de ese dominio, normalmente IIS_WPG(nombredominio) y su correspondiente IUSR_
Estos permisos los tendremos que dar en la carpeta httpdocs del alojamiento, con boton derecho->propiedades y en la pestaña seguridad tendremos que marcar en esos usuarios la opcion de “control total”.
Una vez asignados los permisos “correctos” podemos encontrarnos con un nuevo error, en nuestro caso:
Este se produce porque el usuario PSACLN no tiene acceso al GAC dentro de c:/windows/assembly (aunque no aparezca por ningun lado), podemos solucionar este error de dos formas:
Error de servidor en la aplicación '/'. -------------------------------------------------------------------------------- Acceso denegado. (Excepción de HRESULT: 0x80070005 (E_ACCESSDENIED)) Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código. Detalles de la excepción: System.UnauthorizedAccessException: Acceso denegado. (Excepción de HRESULT: 0x80070005 (E_ACCESSDENIED)) ASP.NET no está autorizado para obtener acceso al recurso solicitado. Considere la posibilidad de conceder derechos de acceso al recurso para la identidad de solicitud de ASP.NET. Si la aplicación no se va a suplantar, ASP.NET utiliza una identidad de proceso base (normalmente {MACHINE}ASPNET en IIS 5 o Network Service en IIS 6). Si la aplicación se va a suplantar mediante , la identidad será el usuario anónimo (generalmente IUSR_MACHINENAME) o el usuario solicitado autenticado. Para conceder a ASP.NET acceso a un archivo, desde el Explorador, haga clic con el botón secundario del mouse en el archivo, elija "Propiedades" y seleccione la ficha Seguridad. Haga clic en "Agregar" para agregar el usuario o grupo adecuado. Resalte la cuenta de ASP.NET y active las casillas según el acceso deseado. Error de código fuente: Se ha generado una excepción no controlada durante la ejecución de la solicitud Web actual. La información sobre el origen y la ubicación de la excepción pueden identificarse utilizando la excepción del seguimiento de la pila siguiente. Seguimiento de la pila: [UnauthorizedAccessException: Acceso denegado. (Excepción de HRESULT: 0x80070005 (E_ACCESSDENIED))] [FileLoadException: No se puede cargar el archivo o ensamblado 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ni una de sus dependencias. Acceso denegado.] System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0 System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +43 System.Reflection.Assembly.InternalLoad(AssemblyNa me assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +127 System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +142 System.Reflection.Assembly.Load(String assemblyString) +28 System.Web.Configuration.CompilationSection.LoadAs semblyHelper(String assemblyName, Boolean starDirective) +46 [ConfigurationErrorsException: No se puede cargar el archivo o ensamblado 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ni una de sus dependencias. Acceso denegado.] System.Web.Configuration.CompilationSection.LoadAs semblyHelper(String assemblyName, Boolean starDirective) +613 System.Web.Configuration.CompilationSection.LoadAs sembly(AssemblyInfo ai) +57 System.Web.Compilation.BuildManager.GetReferencedA ssemblies(CompilationSection compConfig) +178 System.Web.Compilation.BuildProvidersCompiler..cto r(VirtualPath configPath, Boolean supportLocalization, String outputAssemblyName) +54 System.Web.Compilation.ApplicationBuildProvider.Ge tGlobalAsaxBuildResult(Boolean isPrecompiledApp) +232 System.Web.Compilation.BuildManager.CompileGlobalA sax() +51 System.Web.Compilation.BuildManager.EnsureTopLevel FilesCompiled() +337 [HttpException (0x80004005): No se puede cargar el archivo o ensamblado 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ni una de sus dependencias. Acceso denegado.] System.Web.Compilation.BuildManager.ReportTopLevel CompilationException() +58 System.Web.Compilation.BuildManager.EnsureTopLevel FilesCompiled() +512 System.Web.Hosting.HostingEnvironment.Initialize(A pplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters) +729 [HttpException (0x80004005): No se puede cargar el archivo o ensamblado 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ni una de sus dependencias. Acceso denegado.] System.Web.HttpRuntime.FirstRequestInit(HttpContex t context) +8897659 System.Web.HttpRuntime.EnsureFirstRequestInit(Http Context context) +85 System.Web.HttpRuntime.ProcessRequestNotificationP rivate(IIS7WorkerRequest wr, HttpContext context) +333
A la manera plesk:
1. Editar el fichero: %plesk_dir%etcDiskSecuritydisksecurity.xml 2. Agregar esta linea en el XML: 3. Ejecutar: "%plesk_bin%applysecurity" --apply 4. Esperar un buen rato... 5. Reiniciar el pool de aplicaciones y probar si se ha arreglado el problema.
A la manera “tradicional” (cacls es tu amigo)
1. Abre una consola en modo administrador (boton derecho ejecutar como administrador) 2. ejecuta esto en el terminal: cacls C:WindowsassemblyGAC_MSIL /E /R psacln /T /C cacls C:WindowsassemblyGAC_MSIL /E /R psaadm /T /C (tardara un rato y tiene una salida por pantalla de lo mas entretenida) 3. Reinicia el pool de aplicaciones del dominoi y comprueba que funciona.
Si con estos permisos sigue sin funcionarte, es posible que aun falte una cosa mas: asignar permisos al usuario “network” en el alojamiento web (y en general a todos a los directorios que use el DNN y se indiquen en los errores)
Espero que despues de todo esto funcione correctamente y no tengais mas problemas de permisos.