2016-12-18 1 views
1

Мы используем Open XML SDK для создания отчета в слове. Однако, если клиентам требуется один и тот же отчет, он делает наш экземпляр IIS зависающим и не может предоставлять отчеты до перезагрузки. Я определил, что ниже код заставляет IIS зависать.Open XML sdk 2.5 сбой нашего экземпляра IIS

using(WordprocessingDocument o = WordProcessesingDocument.Open(stream, true) 
{ 
    //some processing 
} 

Когда есть один клиент просит отчет он работает нормально, но каждый раз, когда более чем один клиент запрашивает отчет он там висит. У кого-нибудь были подобные проблемы или у кого-то хорошее мнение о том, что может быть неправильным? Из нашего журнала видно, что запросы выполняются в разных потоках.

+1

Этот _might_ будет связан с изолированным хранилищем. Если файлы достаточно большие (> 10 МБ), то изолированное хранилище используется System.IO.Packaging (которое используется OpenXML). Изолированное хранилище не является потокобезопасным, что вызывает проблемы. Более подробную информацию можно найти здесь (http://ericwhite.com/blog/announcing-the-release-of-a-new-system-io-packaging-implementation/). В этом случае исправление будет связано с обновлением до версии 2.6 (которое больше не использует изолированное хранилище). – petelids

+0

Спасибо, петели. Модернизация до версии 2.6 позволила решить эту проблему. – Eebo

+0

Не беспокойтесь, вы хотите, чтобы я добавил это как ответ за полноту? – petelids

ответ

1

Это связано с изолированным хранилищем. Если файл, который вы читаете, достаточно большой (> 10 МБ), то изолированное хранилище используется System.IO.Packaging (которое используется OpenXML).

Изолированное хранилище может быть ошибочным, если к нему обращаются из нескольких потоков одновременно или несколькими узлами с таким же сильным именем (как это было бы здесь). Более подробную информацию можно найти на блоге Eric Whitehere. К счастью, в том же блоге Эрик подробно описывает исправление, которое он произвел в версии 2.6 структуры, где было переписано System.IO.Packaging, поэтому он больше не использует изолированное хранилище. Обновление до этой версии поможет устранить проблему.