Описание системыПроблема с использованием большого двоичного сегмента в OOXML
Компонент построения графиков, который использует OOXML для создания документа.
Компоновка деталей состоит из нескольких частей. Все части написаны на C++ как exe + dll, за исключением интерфейса с документом OOXML. Последний компонент представляет собой COM-компонент, который был создан в C# /. NET. Основная причина этого в том, что .NET framework содержит System.IO.Packaging. Это очень удобный встроенный инструмент для работы с документами OOXML.
Мы создаем документ из шаблона документа OOXML, где определенные биты и куски заменяются их фактическим содержимым.
Один из этих битов является компонентом OLE Server. В основном это двоичный сегмент в файле OOXML. Для записи этого двоичного сегмента компонент Packaging, по-видимому, использует изолированное хранилище.
Проблема
Дать сегмент> Результаты 8MB в выбросу исключения «Не удалось определить личность домена».
На стороне C++ это исключение содержит ошибку ISS_E_ISOSTORE (0x80131450).
Мы проанализировали это и, насколько мы можем судить, это функция безопасности, которая предотвращает полное повреждение не-ненадежного стороннего компонента от вашего HD-видео путем записи огромных файлов.
Мы пробовали много вещей в компоненте .NET/COM (создание пользовательских AppDomains, установка атрибутов для максимальной допустимости, создание собственных потоков и передача их компоненту Packaging), но каждый раз, когда это приводило к тому же исключение.
Что мы можем сделать, чтобы сделать эту работу?
Может быть, когда компонент .NET создается как COM-компонент, его AppDomain всегда недоверен?
Он напрямую не связан с OOXML, но он не позволяет нам писать OOXML, который мы хотим, поэтому в этом отношении это связано. Я никогда не говорил, что моя система была суммирована 8-мегабайтным файлом, функция безопасности среды выполнения .NET для изолированного хранилища кажется, что это хороший верхний предел. – QBziZ 2008-09-29 19:47:49