2011-03-14 15 views
14

Estoy ejecutando Windows 7, y no soy un desarrollador en esta configuración, y recientemente construí un WCF Rest Service en C#, que Ahora estoy intentando implementar en IIS solo en mi máquina local. Después de muchas discusiones, tengo que instalar la aplicación, pero cuando navego a la aplicación, me sale un mensaje de error: error de compilación"CS0016: No se pudo escribir en el archivo de salida" al iniciar una aplicación en IIS 7

Descripción: Se ha producido un error durante la compilación de un recurso necesario para atender esta solicitud. Revise los siguientes detalles de error específicos y modifique su código fuente de manera adecuada.

Mensaje de error del compilador: CS0016: No se pudo escribir en el archivo de salida 'c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Archivos ASP.NET temporales \ scom_sibyll \ 8c0b945e \ 9329016 \ App_global.asax.eagmqgcd. dll '-' Acceso denegado. '

He cazado por la web a la medida de mis posibilidades, y han cambiado los permisos en el fodler archivos temporales de ASP.NET para permitir que la cuenta de servicio de red de pleno derecho, y hecho lo mismo con la carpeta Temp. Copia una cantidad de archivos antes de fallar, por lo que tiene permisos de escritura, así que revisé los permisos para leer desde mi carpeta de origen, y eso también funciona. Además, noté que está saliendo mal cuando intenta almacenar en caché el archivo DLL, y traté de desactivar mi protección Antivirus, así como también apagar el UAC, solo para ver si podía descubrir qué es lo que está bloqueando esto. Estoy recién de ideas ahora. Alguien tiene alguna sugerencia?

+0

Asegúrese de que su identidad IIS tiene la correcta permisos en sus carpetas. –

Respuesta

10

Parece que la cuenta en la que se ejecuta el servicio WCF no tiene acceso para escribir en el directorio "Archivos ASP.NET temporales".

También podría intentar volver a ejecutar regiis.

% windir% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ -i aspnet_regiis

ASP.NET IIS Registration Tool (Aspnet_regiis.exe)

+0

Eso es lo que yo también hubiera pensado, pero el servicio WCF debería estar ejecutándose como Servicio de red por defecto, ¿verdad? ¿Hay alguna forma de confirmar esto? Revisé los derechos para esta cuenta. ya había probado el comando aspnet_regiis, se me olvidó mencionarlo, gracias. ¿Alguna otra idea? – jasonpgignac

+1

Compruebe en qué grupo de aplicaciones se está ejecutando su aplicación web. En el formulario de propiedades de esa aplicación ppol, podrá ver la identidad del grupo yo s corriendo como. A menos que esté utilizando suplantar y IS está configurado para usar la autenticación de Windows. ¿Hay alguna entrada publicada en el registro de eventos? ¿Muestra qué cuenta no pudo acceder a la carpeta? – MattC

+0

pERFECT! Gracias, perdón por la pregunta de novato: no se configuró en la cuenta de usuario correcta. Siéntete estúpido ahora: D – jasonpgignac

45

Para aquellos que buscan aquí como lo hice, si la respuesta aceptada no resuelve el problema que podría Intente seguir este artículo: http://lordzoltan.blogspot.com/2011/02/aspnet-2-and-4-default-application-pool.html

En resumen, parece que a veces se muestra el mismo error cuando el usuario del grupo de aplicaciones no tiene acceso a la carpeta% TMP% /% TEMP%.

Deberá otorgar a IIS_IUSRS la lectura y modificación del acceso sobre la carpeta temporal del usuario que el grupo de aplicaciones ejecuta como.

Puede ser la carpeta temporal en el perfil del usuario de la aplicación, p. Ej. c:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp, o la carpeta temporal del sistema al c:\windows\temp.

Al configurar esto resuelto el problema para mí.

+9

+1 La concesión de acceso a 'C: \ Windows \ Temp' pareció arreglarlo (a pesar de que el mensaje de error es el contrario). ¡Gracias! –

+0

Esta solución funcionó perfectamente para mí. Tuve este problema después de instalar PHP en IIS 7 –

+2

Otorgar acceso a c: \ windows \ temp trabajado también para mí. –

1

Otorgué acceso de lectura y escritura a C: \ Windows \ Temp para el grupo IIS_WPG. Esto funcionó para mí. Estoy en Server 2003 R2 e IIS 6 y el nombre del grupo es diferente. Lo procuro desde http://learn.iis.net/page.aspx/140/understanding-built-in-user-and-group-accounts-in-iis/ donde dice:

• La cuenta incorporada de IUSR reemplaza a la cuenta IUSR_MachineName.

• El grupo integrado IIS_IUSRS reemplaza al grupo IIS_WPG.

Gracias a Dommer por sugerir la carpeta windows temp y a zcrar70 por el buen verano y un enlace con la descripción detallada.

7

En Windows 8/Server 2012 ya no hay soporte para aspnet_regiis. He intentado reinstalar usando las características de Windows: error. He intentado reinstalar IIS: error. He intentado reinstalar a través de WebPI: error.

He resuelto el problema estableciendo las ACL en el directorio temporal de Windows.

Aquí es una PowerShell que hace el trabajo:

$dir = "C:\Windows\Temp" 
$acl = get-acl -path $dir 
$new = "IIS_IUSRS","Modify","ContainerInherit,ObjectInherit","None","Allow" 
$accessRule = new-object System.Security.AccessControl.FileSystemAccessRule $new 
$acl.SetAccessRule($accessRule) 
$acl | Set-Acl $dir 
+0

Creo que el control total es un poco demasiado. Modificar está bien. –

+0

@CarlR ¡Por supuesto que se prefiere el privilegio mínimo! –

0

Algunas veces los archivos temporales podrían ser bloqueados por otro proceso en la estación de trabajo. Como primer paso, reinicie la estación de trabajo y verifique la aplicación.

0

En Windows 8, nada funcionó para mí. Un día, los grupos de aplicaciones decidieron repentinamente que ya no querían trabajar con la cuenta NetworkService.

He resuelto el problema cambiando el grupo de aplicaciones para que funcione en mi propia cuenta de usuario. No es una gran solución, lo sé, pero funcionó.

2

Esta KB lo resolvió para mí, parece que la ruta del archivo temporal no existía en las variables de entorno del sistema operativo.

http://support.microsoft.com/kb/825791

+0

4 horas - ¡y esta fue la cura! Una aplicación había cambiado las variables de entorno y la había subido, ¡vivas! – Dandymon

+0

Escribir iisreset en la línea de comandos como se sugiere en el enlace de respuesta (después de cambiar el permiso en las carpetas temporales) hizo el trabajo por mí –

0

Este error ocurre cuando se utiliza un archivo bat para eliminar los archivos temporales. Probablemente borre el directorio y los permisos dados hayan desaparecido. Entonces tienes que restaurarlos de alguna manera.

La forma más fácil es otorgar el control total sobre los siguientes directorios para todos:

C: \ Windows \ Temp

C: \ Windows \ Microsoft.NET \ Framework [Marco relacionados] \ ASP temporal. NET Archivos \

1

Para mí, la solución fue una combinación de las correcciones descritas aquí. Tuviera que dar a la cuenta NETWORK_SERVICE control total sobre

C: \ Windows \ Temp

y

C: \ Windows \ Microsoft.NET \ Framework [Marco relacionados] \ Temporary ASP.NET Files \

y también cambia la identidad del grupo de aplicaciones al servicio de red.

Asimismo, no se olvide de reiniciar el IIS después de dar el control total de NETWORK_SERVICE en las carpetas temporales

+0

Para citar una gran pieza musical de Ghostbusters. - Salvar el día '! https://www.youtube.com/watch?v=mNuG25oq_b0 –

5

Hay 3 pasos que debe hacer:

1 - check if "Application Pool Identity" is NetworkService 

2 - NETWORK_SERVICE account needs full control on: 
    . C:\Windows\Temp 
    . C:\Windows\Microsoft.NET\Framework[related framework]\Temporary ASP.NET Files\ 

3 - restart the IIS 

Error Resuelto

También podría intentar volver a ejecutar regiis. "% windir% \ Microsoft.NET \ Framework [Marco relacionados] \ aspnet_regiis -i"

+0

Hola, hombre, gracias hiciste mi día ... –

0

tengo permisos pero estoy empezando a conseguir ese error. 'máquina de reinicio' funciona para mí

Cuestiones relacionadas