Problema nell'utilizzo di un grande segmento binario in OOXML
Domanda
Descrizione del sistema
Un componente di stampa che utilizza OOXML per generare un documento.
Il componente di stampa è composto da più parti. Tutte le parti sono scritte in C ++ come exe + dll, ad eccezione dell'interfaccia del documento OOXML. Quest'ultimo componente è un componente COM creato in C # /. NET. Il motivo principale di ciò è che il framework .NET contiene System.IO.Packaging . Questa è una funzione integrata molto utile per gestire i documenti OOXML.
Creiamo un documento da un documento OOXML modello in cui alcuni pezzi vengono sostituiti dal loro contenuto effettivo.
Uno di questi bit è un componente Server OLE. Fondamentalmente questo è un segmento binario all'interno del file OOXML. Per scrivere questo segmento binario, il componente Packaging utilizza apparentemente una memoria isolata.
problema
Scrivere un segmento > 8 MB comportano il lancio di un'eccezione "Impossibile determinare l'identità del dominio".
Sul lato C ++ questa eccezione contiene l'errore ISS_E_ISOSTORE (0x80131450).
Abbiamo analizzato questo e, per quanto ne sappiamo, questa è una funzione di sicurezza che impedisce a componenti di terze parti non attendibili di rovinare completamente il tuo HD scrivendo file immensi.
Abbiamo quindi provato molte cose nel componente .NET / COM (creazione di AppDomain personalizzati, impostazione degli Attributi per la massima permissività, creazione dei nostri stream e passaggio di questi al componente Packaging) ma ogni volta ha provocato la stessa eccezione essere lanciato.
Cosa potremmo fare per far funzionare questo?
Potrebbe essere che quando il componente .NET viene istanziato come componente COM, il suo AppDomain è sempre non attendibile?
Soluzione
Potresti provare a decomprimere il pacchetto da solo (invece di utilizzare l'API del pacchetto .NET), scrivere direttamente nel file che rappresenta il segmento binario e comprimerlo nuovamente.
Altri suggerimenti
Dovresti cambiare il titolo di quella domanda poiché il tuo problema non è correlato a OOXML.
A parte questo: quale sistema stai lavorando su quei blocchi di dati da 8 MB comportano il rischio di totalizzare il tuo disco rigido?