2009-11-11 8 views
5

Tengo una aplicación C# que estoy intentando enviar a una red distribuida. La aplicación funciona bien localmente (como siempre), pero cuando la envío a la red, no funciona porque no puede escribir en el directorio C: \ Windows \ Temp. Realmente no estoy llamando a ningún código que escriba en ese directorio, pero imagino que es causado por mis llamadas a un servicio web, dada la siguiente excepción:Impedir que .NET escriba en C: Windows Temp

No se pudo generar una clase temporal (resultado = 1). error CS2001: El archivo de origen 'C: \ WINDOWS \ TEMP \ cyalinh1.0.cs' no pudo ser error encontrado CS2008: no se especificó ninguna entrada '. Por favor, consulte InnerException para más detalles.

¿Hay alguna forma de evitar que .NET escriba en el directorio Temp? ¿Es una configuración en el archivo .config?

ACTUALIZACIÓN

Puede SGEN usarse para prevenir la creación de esas clases creados de forma dinámica desde el servicio web?

+0

No tengo otra respuesta que decirle que lo que se está ejecutando es el hecho de que cuando el tiempo de ejecución ejecuta su ensamblaje, realmente necesita hacer otra ronda de Compilación Just In Time para obtener el código de IL a código de máquina. –

+0

¿Puedo evitar estas compilaciones dinámicas de clase con SGENing el dll que se llama a través de un servicio web? – Josh

Respuesta

4

Parece que los servicios web requieren permiso de lectura/escritura para% SystemRoot% \ Temp (MSDN).

De here:

Si se está utilizando ASP.NET 2.0 o anteriormente, puede asignar los permisos requeridos con el comando:

aspnet_regiis -GA MachineName\Account 

Este blog post contiene instrucciones sobre cómo cambiar la ubicación de la carpeta SystemRoot \ Temp utilizada para esto (así como las instrucciones sobre cómo usar el reflector para determinar la configuración en la web).config para establecer para una situación como esta)

+0

¿Existe también una configuración, o quizás una variable de entorno (a la 'TMPDIR'), para establecer la ruta del directorio temporal? –

+0

Publicación editada para agregar un enlace para obtener instrucciones sobre cómo cambiar la carpeta temporal. –

1

El problema que tiene aquí es que está utilizando alguna función que autogenera código temporal. Necesita una ubicación para hacer esto. Entonces, sí, aunque puede evitar que escriba código en esa ubicación específica, la única manera de evitar que genere código (que debe almacenarse en algún lugar) es no usar una función que genere clases temporales.

0

Josh,

Mi conjetura sería que la llamada que está realizando está tratando de patear de una sesión de depuración en la PC de destino. Está intentando extraer el archivo de origen, después de tener una excepción.

La causa raíz es probable que sea una excepción en la llamada al servicio web.

Para mitigar la escritura a la carpeta de archivos temporales, es posible que pueda desactivar la depuración Just-In-tiempo en los equipos de destino: algo así como <system.windows.forms jitDebugging="false"/> en config aplicación

hice algo de investigación. Parece que el problema puede estar en el servidor, no en las máquinas del cliente. Si agrega permisos de lectura/escritura a la carpeta temporal para el usuario que aloja el servicio web, puede estar bien. Perdón por el loco consejo anterior ...

0

Busqué tantos foros y finalmente lo arreglé ... Esto funcionó para mí ... ¡aquí lo tienes!

  1. botón derecho del ratón c: \ windows \ temp

  2. en la pestaña Seguridad, agregue la cuenta iisuser a la lista de usuarios y dar lectura/escritura/ejecución de acceso (o) de pleno derecho

  3. reinicie el sitio web

Eso es todo !!! ... ver que la aplicación que consume el servicio web desplegado

Esto debería hacer ...

Cuestiones relacionadas