Проблема с использованием большого двоичного сегмента в OOXML - PullRequest
7 голосов
/ 29 сентября 2008

Описание системы

Компонент построения, который использует OOXML для создания документа.

Компонент черчения состоит из нескольких частей. Все части написаны на C ++ как exe + dll, за исключением интерфейса к документу OOXML. Последний компонент является компонентом COM, который был создан в C # /. NET. Основная причина этого заключается в том, что .NET Framework содержит System.IO.Packaging . Это очень удобное встроенное средство для работы с документами OOXML.

Мы создаем документ из шаблона OOXML-документа, в котором некоторые фрагменты заменяются их фактическим содержимым.

Один из этих битов является компонентом OLE-сервера. По сути, это двоичный сегмент в файле OOXML. Для записи этого бинарного сегмента компонент Packaging, очевидно, использует изолированное хранилище.

Задача

Запись сегмента размером более 8 МБ приводит к возникновению исключения «Невозможно определить идентичность домена».

На стороне C ++ это исключение содержит ошибку ISS_E_ISOSTORE (0x80131450).

Мы проанализировали это, и, насколько мы можем судить, это функция безопасности, которая предотвращает полное разрушение вашего жесткого диска полу-ненадежным сторонним компонентом путем записи огромных файлов.

Затем мы много чего перепробовали в компоненте .NET / COM (создание пользовательских доменов приложений, установка атрибутов для максимальной разрешающей способности, создание собственных потоков и передача их компоненту упаковки), но каждый раз это приводило к одному и тому же исключению быть брошенным.

Что мы могли бы сделать, чтобы сделать эту работу?

Может ли быть так, что, когда компонент .NET создается как компонент COM, его домен приложений всегда не заслуживает доверия?

Ответы [ 2 ]

2 голосов
/ 06 октября 2008

Вы можете попытаться разархивировать пакет самостоятельно (вместо использования API пакета .NET), написать прямо в файл, представляющий двоичный сегмент, и снова сжать его.

1 голос
/ 29 сентября 2008

Вам следует изменить заголовок этого вопроса, поскольку ваша проблема не связана с OOXML.

Кроме этого: над какой системой вы работаете, эти 8-мегабайтные блоки данных приводят к риску накопления жесткого диска?

...