Каковы наиболее распространенные, типичные вещи, которые нужно ИЗБЕГАТЬ кодирования в моем приложении ASP.NET, чтобы оно работало со средним доверием на общем хосте?

Что вам мешает делать Medium Trust? Например, я уже узнал, что Medium Trust не дает вам использовать System.IO.Path.GetTempPath (). Что еще в этом роде?


person Corey Trager    schedule 09.11.2008    source источник


Ответы (6)


Вот как можно узнать о проблемах с доверием и решить их.

1) Найдите файлы в папках Windows \ Microsoft.NET \ Framework [ВАША ВЕРСИЯ] \ CONFIG:

  • web.config (это корневой файл конфигурации)
  • web_mediumtrust.config
  • web_hightrust.config

2) Измените web.config, чтобы он сказал

<trust level="Medium" originUrl="" />

3) Попробуйте свое приложение ASP.NET. Моя не удалась с ошибкой разрешения.

4) Различайте файлы web_mediumtrust.config и web_hightrust.config в инструменте сравнения, например WinMerge.

5) Скопируйте настройки с высокого на средний по одному и посмотрите, как они повлияют на ваше приложение. В моем случае сообщение об ошибке относилось к ConfigurationPermission, поэтому его было легко диагностировать.

Если вы можете определить точные строки в файле web_mediumtrust.config, которые блокируют вас, то, возможно, вы сможете поделиться этим со своей хостинговой компанией, и у вас будет больше шансов уладить проблему.

Дополнительная документация здесь:
http://msdn.microsoft.com/en-us/library/aa302425.aspx

@Oli, мое приложение IS размещено на GoDaddy, и мне пришлось найти обходные пути в коде, когда я начал использовать Lucene.NET. Мне пришлось изменить исходный код Lucene.NET, чтобы не использовать GetTempPath и System.IO.FileInfo.

person Corey Trager    schedule 09.11.2008
comment
Я просто укажу на то, что, вероятно, очевидно для всех остальных, но что я должен был проверить, просто убедитесь: ‹trust level = Medium /› должен быть в разделе ‹system.web›, а атрибут level чувствителен к регистру , поэтому верхний регистр M, нижний регистр все остальное: S - person Zhaph - Ben Duguid; 21.05.2009

Кто может быть уверен? Вот почему вам следует разрабатывать со средним уровнем доверия, установленным в вашем web.config.

 <trust level="Full|High|Medium|Low|Minimal" />
person Shawn    schedule 09.11.2008

Большинство общих хостов не используют среду истинного среднего доверия, потому что она ограничивает некоторые вещи, которые слишком важны. Другие ограничивают некоторые дополнительные настройки по своим анальным причинам.

Лучшее, что вы можете сделать, - это спросить своего хоста, какие настройки они используют для ASPNET. Спросите характеристики используемого ими уровня доверия. Узнайте ограничения памяти. Получив эти сведения, вы сможете воспроизвести сценарий на локальном уровне.

Если они не сообщат вам, просто настройте приложение для работы со средним уровнем доверия, но это (очевидно) не обязательно будет работать, если они используют измененный уровень доверия.

Вот некоторая информация о настройке уровней доверия в IIS.

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

Вот выдержка из информационной страницы GoDaddy Medium Trust:

Приложения, работающие со средним уровнем доверия, не имеют доступа к реестру, журналу событий Windows и не могут использовать ReflectionPermission (но могут использовать Reflection). Такие приложения могут взаимодействовать только с определенным диапазоном сетевых адресов, а доступ к файловой системе ограничен иерархией виртуальных каталогов приложения.

Использование среднего уровня доверия предотвращает доступ приложений к общим системным ресурсам и исключает возможность вмешательства приложений. Добавление OleDbPermission и OdbcPermission позволяет приложениям использовать этих поставщиков данных для доступа к базам данных. WebPermission изменен, чтобы разрешить исходящий трафик http и https.

Это может не точно соответствовать тому, с чем вам придется работать с вашим хостом (если вы не используете GoDaddy), но это типичный пример.

person Oli    schedule 09.11.2008
comment
Есть ли где-нибудь документация, которая показала бы мне, как установить средний уровень доверия на моем собственном компьютере, чтобы попробовать что-нибудь? Я просмотрел MSDN и не смог найти ... - person Corey Trager; 09.11.2008
comment
Конечно, я просто добавил ссылку на пост. - person Oli; 09.11.2008

Убедитесь, что любые сторонние библиотеки / фреймворки (на ум приходит Castle) построены (или могут быть построены) со средним уровнем доверия.

person Bless Yahu    schedule 09.11.2008

Библиотека system.runtime.serialization полностью недоступна при среднем уровне доверия.

Я закодировал это для сериализации / десериализации json и выяснил на собственном горьком опыте. Потребовалась неделя, чтобы партнер подтвердил, что виноваты ограничения на средний уровень доверия. В результате я сменил хостинговую компанию.

person Community    schedule 10.12.2008

При среднем уровне доверия, по крайней мере, на моем хосте, вызовы P / INVOKE недоступны, т.е. использование [DLLImport] для вызова COM-компонента не сработает.

-Эдуд

person edosoft    schedule 15.01.2009