2008-11-07 20 views
6

Mi webapp (ASP.NET 2.0) consume un servicio web (asmx en 1.1 framework) en la misma máquina. Después de recibir XML a cambio, lo paso a XslCompiledTransform para transformar XML a HTML y funciona bien.XslCompiledTransform.Load() aumenta System.IO.FileNotFoundException

Ayer recibí un System.IO.FileNotFoundException con frecuencia y no sé qué causa este tipo de problema.

Primer vistazo Pensé que se trataba de permiso de lectura/escritura en c: \ windows \ temp y luego me aseguré de darle un permiso completo para el servicio de red (también todos al fin -_-!) Pero no ayuda .

Se agradecerán todas las ideas o soluciones.

-------------------- stack trace -------------------------- 
Exception: **System.IO.FileNotFoundException** 
**Could not find file 'C:\WINDOWS\TEMP\sivvt5f6.dll'.** 

    at System.IO.__Error**.WinIOError**(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 
rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) 
    at Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames) 
    at Microsoft.CSharp.CSharpCodeGenerator.FromDomBatch(CompilerParameters options, CodeCompileUnit[] ea) 
    at Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromDomBatch(CompilerParameters options, CodeCompileUnit[] ea) 
    at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromDom(CompilerParameters options, CodeCompileUnit[] compilationUnits) 
    at System.Xml.Xsl.Xslt.Scripts.CompileAssembly(List`1 scriptsForLang) 
    at System.Xml.Xsl.Xslt.Scripts.CompileScripts() 
    at System.Xml.Xsl.Xslt.QilGenerator.Compile(Compiler compiler) 
    at System.Xml.Xsl.Xslt.**Compiler. 
Compile**(Object stylesheet, XmlResolver xmlResolver, QilExpression& qil) 
    at System.Xml.Xsl.XslCompiledTransform.LoadInternal(Object stylesheet, XsltSettings settings, XmlResolver stylesheetResolver) 
    at System.Xml.Xsl.**XslCompiledTransform.Load**(String stylesheetUri, XsltSettings settings, XmlResolver stylesheetResolver) 

Respuesta

1

Bien, eso es interesante. He visto problemas similares con los serializadores, pero no con XslCompiledTransform específicamente.

Desde el título, esperaba que fuera un problema al cargar/importar las transformaciones importadas, que probablemente se hubieran podido reparar suministrando un XmlResolver. ¡No encontrar las dlls autogeneradas es muy extraño!

Como un respiro (mientras investiga el problema), es posible que desee ver si todavía ocurre con XslTransform. Me doy cuenta de que esto no es ideal (teniendo en cuenta las optimizaciones, etc. en XslCompiledTransform), pero al menos podría permitir que tu aplicación funcione mientras investigas ...

La primera cosa de investigación que haría sería mirar el registro de eventos. ¿Cualquier cosa interesante? También vale la pena comprobar si su software antivirus no se ha vuelto loco con falsos positivos (poco probable).

Lo siguiente que haría es aislar la aplicación - es decir, cortar el material 1.1 - ya que lo está llamando a través de una página de Asmx (a una aplicación separada) no debería ser un factor, por lo que debería (teóricamente) ser capaz de reproducirlo solo desde un archivo plano xml. Idealmente, sería bueno tener una página (tal vez un ashx para simplificar) en su proyecto que solo intenta hacer una transformación desde un archivo local.

¿Es reproducible con xslt/xml simple? Cuanto más simple sea el código que tenga un problema, más cerca estará de encontrarlo/arreglarlo o de tener algo que pueda activar en MS mediante "connect".

1

Muchas gracias Marc por su respuesta.

Mi archivo xsl no tiene ningún recurso externo al que hacer referencia (no incluir, importar) por lo que XmlResolver no debe ser investigado.

La transformación funciona bien en otro servidor (tengo 2 servidores) y también en este servidor, después de hacer iisreset, vuelve a funcionar. Pero antes de una hora, vuelve a suceder. ¡Verifiqué el Visor de eventos y registré el mismo error que obtuve!

---------------- de Visor de sucesos ------------- Tipo de suceso: advertencia

Evento Fuente: ASP. NET 2.0.50727.Categoría 0 Evento: Evento Web Evento ID: 1309 Fecha: 11/7/2008 Tiempo: 2:07:37 PM Usuario: N/A ordenador: XXXX Descripción: Código de evento: 3005 Mensaje Evento : Se ha producido una excepción no controlada. hora del evento: 11/7/2008 2:07:37 PM hora del evento (UTC): 11/7/2008 7:07:37 AM Evento ID: f17058f2126c4a4abb1742a3099010b0 secuencia Evento: 25407 Evento ocurrencia: 276 Evento código de detalle: 0

información del proceso: Proceso ID: 1128 nombre proceso: w3wp.exe nombre de la cuenta: NT AUTHORITY \ NETWORK SERVICE

información de excepción: tipo de excepción : FileNotFoundException mensaje Excepción: no se pudo buscar archivo 'C: \ WINDOWS \ TEM P \ irdt-y8o.dll '. .....

+0

Curioso. Supongo que los 3 tienen la misma configuración (en particular, la configuración del directorio de temperatura en la web.config/machine.config principal)? –

5

Después de comprobar los detalles y buscando en Google para los temas relacionados,

  1. Este problema encontrado con .Transform() y también con occures XmlSerialization como dijo Marc. Christoph Schittko tiene un buen artículo para troubleshooting.
  2. Alguien dijo que el problema puede deberse a algún parche de actualización de Windows que puede cambiar el comportamiento del serializador.

    Llamé a mi administrador para aclarar si hay algún cambio en nuestro servidor y me dijo que no cambia nada y me sugirió que reiniciara.

    y sí ... mi problema ha sido resuelto por el servidor ..... reiniciar (Windows 2003);

+0

+1 Experimentamos exactamente el mismo error (archivo no encontrado para una DLL en C: \ Windows \ Temp) para una XslCompiledTransform. Fue arreglado por un reinicio del servidor. –

1

sólo algunas ideas para la solución de problemas:

  • es el archivo DLL ¿creado? Puede verificar, p. con Filemon de Sysinternals para ver si el XSLT realmente está compilado.
  • ¿Hay suficiente espacio libre en el disco?
  • ¿Cuántos archivos hay en su carpeta temporal? Puede haber problemas con demasiados archivos en% TMP%
  • ¿Qué más está ejecutándose en la máquina? ¿Algo como Antivirus que podría limpiar la carpeta Temp?
1

Estoy experimentando el mismo problema en Windows Server 2003. Nuestra aplicación ASP.NET está consumiendo un servicio web (en una máquina externa en la web) y después de un tiempo aparece este mensaje de error.

La ejecución de un reciclaje en el grupo de aplicaciones soluciona el problema, pero estoy buscando una respuesta a la causa del problema.

¿Alguien?

Cuestiones relacionadas