Вопрос

У меня запущена установка Windows Web 2008 x64.

В связи с требованием, чтобы приложение могло импортировать файлы Excel, мне пришлось изменить веб-приложение для работы в 32-битном режиме. Библиотеки MSAccess / Excel недоступны в x64.

Мне также пришлось повысить приложение для работы в доверии = Full. Ранее это было под уровнем = средний.

Есть ли хорошее решение этой проблемы? Я хочу понизить уровень доверия и не ставить под угрозу приложение на 32 бита только потому, что один экран требует импорта в Excel (использование этого экрана также нечасто)

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

Это было полезно?

Решение

Как правильно указывает FoxFire , вы нельзя смешивать 32-битный и 64-битный код в одном процессе.

Любое приложение ASP.NET, которое должно взаимодействовать с Office, потребует повышенных уровней доверия.

Есть способ обойти это, используя технику, известную как «песочница».

То, что вы делаете, - это пишите сборку-обертку, которая выполняет ту работу, которую вам требуется выполнить в Excel. Пометьте сборку атрибутом [assembly: AllowPartiallyTrustedCallers] , подпишите ее и затем разверните в GAC.

Любые классы в этой сборке, которые требуются для взаимодействия с компонентами Office Interop, должны указываться с помощью [PermissionSet (SecurityAction.Assert, Unrestricted = true)] или любых других требуемых требований.

Это позволит вам снизить уровень доверия на вашем сервере, но при этом использовать компоненты Office.

Это основано на предположении, что у вас есть административный доступ к серверу, чтобы иметь возможность удалить «доверенную» сборку песочницы в GAC.

Другие советы

В рамках одного и того же процесса вы никогда не можете смешивать 32-битные и 64-битные. Возможно, вы могли бы написать второе приложение, которое выполняет все за Excel, а затем скомпилировать его в 32-битный исполняемый файл. Затем вы можете вызвать (выполнить файл с некоторыми параметрами) этот исполняемый файл из вашего веб-приложения (все равно потребуется полное доверие, но тогда он может работать в 64-битном режиме).

Изменить: вам не нужно полное доверие обязательно. Вы также можете создать собственный уровень доверия. Но дело в том, что он не будет работать на стандартном веб-уровне доверия.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top