2010-02-23 34 views
6

Esto es lo que he intentado:No se pudo encontrar el archivo "C: WINDOWS TEMP xxxx.dll

  1. Cambiar el directorio en el que se almacenan los archivos temporales (Cambiado localmente para cada sitio web)..
  2. tienda del objeto XMLSerialization en una variable global y el uso que en lugar de crear uno nuevo cada vez.
  3. Borrar todos los archivos temporales en la carpeta temp de windows.
  4. Establecer permisos en las ventanas \ temp (no tengo ellos configurados para todos en este momento solo para tratar de resolver el problema).

Mi configuración es la siguiente:

IIS7 en Windows 2008 servidor dedicado. El sitio web está escrito en ASP.NET utilizando Delphi. Tengo varios archivos XML que necesitan ser serializados, no solo uno. Mi sitio web habla con el servicio web y procesa el XML (supongo que esta es la parte que está rompiendo todo)

¿Alguien tiene alguna sugerencia además de la que se detalla? He leído sobre el uso de SGEN para precompilar el objeto de serialización, pero ¿funcionará esto para más de un archivo XML? Realmente no sé mucho al respecto.

Aquí se muestra un ejemplo:

Este es el código para uno de mis archivos XML. StockXMLSer se mantiene globalmente y después de las pruebas solo se crea una vez por sitio.

function IntGetSTOCK_ITEMS(S: TStream): STOCK_ITEMS; 
begin 
    if not Assigned(StockXMLSer) then begin 
    StockXMLSer := XmlSerializer.Create(STOCK_ITEMS.ClassInfo); 
    OutputDebugString('StockXMLSer Serializer Created'); 
    end; 
    Result := STOCK_ITEMS(StockXMLSer.Deserialize(S)); 
end; 
+0

¿Puedes publicar tu código que está haciendo la serialización? – used2could

+0

Agregó el código a la publicación principal. – webnoob

+0

¿Borró la carpeta Temp DESPUÉS de que se ejecutara la aplicación web? – Nick

Respuesta

4

Deberá agregar algunas configuraciones a su código para poder depurar su código de serialización. Por favor consulte el siguiente artículo en msdn.

Troubleshooting Common Problems with the XmlSerializer

También hay un truco que hay que mantendrá a los archivos creados en su carpeta temporal para que pueda ver lo que está sucediendo.

En circunstancias normales, el XmlSerializer elimina la fuente de C# archivos para las clases de serialización cuando ya no son necesarios. No es un modificador de diagnóstico no documentado, sin embargo, que indicará que el XmlSerializer elimina para dejar estos archivos en su disco. Puede configurar el interruptor en .config Archivo de la aplicación :

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.diagnostics> 
     <switches> 
      <add name="XmlSerialization.Compilation" value="4" /> 
     </switches> 
    </system.diagnostics> 
</configuration> 

Con este interruptor presente en el archivo .config , los archivos de código fuente C# permanecen en el directorio temporal.Si usted es trabajando en un equipo que ejecuta Windows 2000 o posterior , la ubicación predeterminada para el directorio temporal es \ Documents and Settings \\ LocalSettings \ Temp o \ Temp, para web aplicaciones que se ejecutan bajo la cuenta ASPNET . Los archivos C# son fáciles de perder porque tienen muy extraño aspecto, nombres de archivo generados aleatoriamente, algo así como: bdz6lq-t.0.cs. El XmlSerializerPreCompiler establece esta diagnósticos del conmutador, para que pueda abrir los archivos para inspeccionar las líneas de cual los XmlSerializerPreCompiler reportados errores de compilación en el Bloc de notas o Visual Studio.

+0

Por alguna razón la parte xml no aparece en mi respuesta: gyurisc

+0

Si agrego el código para mantener los archivos en la carpeta temporal, seguramente eso resolverá el problema porque siempre debería ser capaz de encontrar el dll. ¿Es eso correcto? – webnoob

+0

Creo que su problema es diferente de agregar el código a la carpeta temporal. Supongo que falta el dll porque nunca se crea por alguna razón. compilación, por ejemplo. necesitarás encontrar esa razón y arreglarla y estarás bien. – gyurisc

2

XML Serialization crea una DLL temporal con el código de serialización en ella, en algún lugar del directorio temporal. Esto se carga en su App Domain cuando se crea el serializador. Es posible que esté eliminando esta DLL cuando borre el directorio Temp y, por alguna razón, no se regenera correctamente.

+0

+1 No mencioné este concepto en mi respuesta – gyurisc

+1

Solo he eliminado el .dll una vez, así que este no sería el caso para mi situación, pero estoy de acuerdo en que esto sería un problema. +1 (lo siento, no he estado en el foro por mucho tiempo, así que olvídate de las cosas más). – webnoob

2

Sólo para que conste, que ha habido un error similar a éste y encontró la solución de this blog

Después de ajustar los permisos en la carpeta TEMP, la funcionalidad que el error había comenzado a trabajar de nuevo.

Cuestiones relacionadas