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

StackOverflow https://stackoverflow.com/questions/275444

Вопрос

Какие вещи, вызывающие среднее доверие, мешают вам делать?Например, я уже узнал, что среднее доверие не позволяет вам использовать System.IO.Path.GetTempPath().Какие еще подобные вещи?

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

Решение

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

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 с помощью инструмента diff, такого как 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.

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

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

 <trust level="Full|High|Medium|Low|Minimal" />

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

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

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

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

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

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

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

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

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

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

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

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

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

- Эдуд

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