c# - read - Problema al utilizar un segmento binario grande en OOXML
read excel with openxml c# (2)
Debe cambiar el título de esa pregunta ya que su problema no está relacionado con OOXML.
Aparte de eso: ¿en qué sistema estás trabajando que los 8MB de fragmentos de datos conllevan el riesgo de sumar tu disco duro?
Descripción del sistema
Un componente de trazado que usa OOXML para generar un documento.
El componente de trazado consta de varias partes. Todas las partes están escritas en C ++ como exe + dll, con la excepción de la interfaz del documento OOXML. El último componente es un componente COM que se creó en C # /. NET. La razón principal de esto es que .NET Framework contiene System.IO.Packaging . Esta es una práctica función muy útil para tratar con documentos OOXML.
Creamos un documento a partir de una plantilla de documento OOXML donde ciertos bits y piezas se reemplazan por su contenido real.
Uno de estos bits es un componente del servidor OLE. Básicamente, este es un segmento binario dentro del archivo OOXML. Para escribir este segmento binario, el componente de empaque aparentemente usa almacenamiento aislado.
Problema
Escribir un segmento> 8 MB da como resultado una excepción lanzada "No se puede determinar la identidad del dominio".
En el lado de C ++, esta excepción contiene el error ISS_E_ISOSTORE (0x80131450).
Hemos analizado esto y, por lo que podemos decir, esta es una característica de seguridad que impide que un componente de terceros que no son de confianza pueda arruinar por completo su HD al escribir archivos inmensos.
Luego probamos muchas cosas en el componente .NET / COM (creando AppDomains personalizados, estableciendo atributos para la máxima permisividad, creando nuestros propios flujos y pasándolos al componente de empaquetado) pero cada vez se producía la misma excepción.
¿Qué podríamos hacer para que esto funcione?
¿Podría ser que cuando el componente .NET se crea una instancia como un componente COM, su AppDomain siempre no es de confianza?
Puede intentar descomprimir el paquete usted mismo (en lugar de usar la API del paquete .NET), escribir directamente en el archivo que representa el segmento binario y comprimirlo de nuevo.