Problema usando o grande segmento de binário em OOXML
Pergunta
Descrição do Sistema
Um componente plotagem que usos OOXML para gerar um documento.
Traçando componente consiste em várias partes. Todas as peças são escritos em C ++ como exe + dll, com exceção da interface com o documento OOXML. Este último componente é um componente que foi criado em C # /. NET. A principal razão para isto é que o .NET framework contém System.IO.Packaging . Esta é uma muito útil built-in facilidade para lidar com documentos OOXML.
Nós criar um documento a partir de um modelo de documento OOXML onde certos pedaços e peças são substituídas pelo seu conteúdo real.
Um desses bits é um componente OLE Server. Basicamente, este é um segmento binário dentro do arquivo OOXML. Para escrever este segmento de binário, o componente de embalagem, aparentemente, usa armazenamento isolado.
Problema
Escrevendo um segmento> 8MB resulta em uma exceção sendo lançada "Não foi possível determinar a identidade do domínio".
o C ++ lado esta excepção contém o erro ISS_E_ISOSTORE (0x80131450).
Analisamos este e, tanto quanto nós podemos dizer, este é um recurso de segurança que impede componente de terceiros semi-não confiável de arruinar completamente o seu HD escrevendo arquivos imensos.
Temos então tentei um monte de coisas no .NET / COM componente (AppDomains personalizados criando, Definição de atributos para máxima permissividade, criando nossas próprias Streams e passando-os na sua componente de embalagem), mas cada vez que resultou na mesma exceção sendo lançada.
O que poderíamos fazer para fazer este trabalho?
Pode ser que quando o componente .NET é instanciado como um componente COM, o AppDomain é sempre não confiável?
Solução
Você pode tentar descompactar o pacote de si mesmo (em vez de usar o .NET pacote API), escreva diretamente para o arquivo que representa o segmento de binário e fechá-lo novamente.
Outras dicas
Você deve alterar o título da questão desde o seu problema não é OOXML relacionados.
Outro que isso: que sistema você está trabalhando nisso pedaços 8MB de dados resultar no risco de totalizando seu disco rígido
?