Каковы наиболее распространенные, типичные вещи, чтобы избежать кодирования в мой ASP.NET app для того, чтобы он работал под средним доверием на общем хосте?

Что такое то, что среднее доверие мешает вам делать? Например, я уже узнал, что среднее доверие мешает вам использовать систему.ИО.Путь.GetTempPath (). Что еще такое?

6 ответов


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

1) Поиск в Windows\Microsoft.NET\Framework [ваша версия]\CONFIG папки для файлов:

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

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

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

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

4) Diff web_mediumtrust.config и это.config в инструменте diff, например WinMerge.

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

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

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

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


кто может быть уверен? Вот почему вы должны развиваться с уровнем доверия среды, установленной в вашем интернете.конфиг.

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

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

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

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

здесь некоторые сведения о настройке уровней доверия в IIS.

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

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

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

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

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


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


система.во время выполнения.библиотека сериализации полностью недоступна в режиме среднего доверия.

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


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

- Edoode