Является ли попытка развития Medium Trust безнадежным делом?

Я начал разрабатывать новое приложение MVC с использованием кода Entity Framework и Unity для внедрения зависимостей. Я использовал EF5 и Unity, потому что думал, что они должны работать в Medium Trust. Однако, когда я добавил тег <trust level="Medium" /> в свой web.config, я начал получать исключения разрешения на отражение.

Всегда кажется, что всякий раз, когда я выхожу за рамки использования встроенных вещей, таких как System.Data.SqlClient ADO.net, я всегда сталкиваюсь с проблемами в Medium Trust. Auto-Mapper: сбой. NHibernate: сбой. MySQL: сбой. EF5 Code-first: сбой. МОК: не удалось.

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

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


person Sam    schedule 31.05.2013    source источник


Ответы (2)


Официальная позиция команды ASP.NET заключается в том, что средний уровень доверия устарел. Это означает несколько вещей:

  • Мы автоматически исправляем все ошибки, связанные со средним уровнем доверия, о которых нам сообщают как «не исправлять».
  • Мы рекомендовали хостерам отказаться от Medium Trust и вместо этого использовать надлежащую изоляцию на уровне ОС (http://support.microsoft.com/kb/2698981).
  • Мы удаляем поддержку Medium Trust из разрабатываемых нами фреймворков (MVC, WebAPI, SignalR и т. Д.). В будущем приложения, построенные на этих платформах, потребуют полного доверия.

Здесь термин «Среднее доверие» выше относится ко всем конфигурациям неполного доверия в ASP.NET, включая использование встроенных уровней доверия (минимальный, низкий, средний, высокий) или любые настраиваемые уровни доверия.

Редактировать 26 мая 2015 г .: В .NET Framework в целом не рекомендуется частичное доверие, и клиентам рекомендуется не полагаться на него как на границу безопасности. Из MSDN:

Безопасность доступа для кода в .NET Framework не следует использовать в качестве границы безопасности с частично доверенным кодом, особенно с кодом неизвестного происхождения. Мы не рекомендуем загружать и выполнять код неизвестного происхождения без принятия альтернативных мер безопасности.

person Levi    schedule 20.06.2013
comment
Можете ли вы добавить ссылку на статью, в которой изложена эта официальная позиция? - person Steven; 26.02.2014
comment
Стивен: support.microsoft.com/kb/2698981 - это основная статья. Есть несколько других, например asp.net/aspnet/overview/web-development-best-practices/. - person Levi; 26.02.2014
comment
Я знаю, что это поздно, но спасибо, это многое прояснило. Это все еще очень актуально, даже сейчас, в 2018 году. Я обнаружил, что есть много провайдеров серверного хостинга, которые все еще применяют частичное доверие (по крайней мере, на общих серверах для небольших проектов). Я искал поставщика и до сих пор пробовал четыре разные компании, каждая из которых требует среднего доверия для всех приложений на своем сервере. Конечно, согласно вашей статье и вопросу, проекты, созданные с использованием более новых версий ASP.NET, даже не компилируются с частичными разрешениями. Это может, мягко говоря, раздражать - person Scorch; 22.01.2018

В общем, все, что требует глубокого отражения, не может работать на Medium Trust.

В твоем случае:

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

NHIbernate: используйте излучение отражения, чтобы разрешить ленивую загрузку, потому что ленивая загрузка в NH осуществляется прокси (чтобы избежать этого, вы можете отключить ленивую загрузку или использовать NHibernate ProxyGenerator, который является утилитой, которая помогает предварительно создавать прокси)

Nhibernate ProxyGenerator

EF: На самом деле я не обнаружил больших проблем с EF и Medium Trust .... не сериализуйте объект с ассоциациями или коллекциями.

IoC: IoC - это убийственное приложение для отражения :) вы можете попробовать AutoFac, который работает на Medium Trust

AutoFac

В целом Medium Trust - это большое ограничение ... но все зависит от того, над каким проектом вы работаете. Подумайте также о том, чтобы использовать какой-нибудь хостинг с полным доверием, такой как Arvixe.

Надеюсь это поможет

person Simone Belia    schedule 05.06.2013
comment
Спасибо за ваш ответ. В EF5 проблемы с MT можно обойти, установив общедоступные методы получения и установки для всех свойств, которые будут сохраняться в базе данных. Проблема в том, что есть некоторые свойства, которые пользователи не могут устанавливать. Предположительно это исправлено в EF6. Похоже, что Unity работает и в Medium Trust. Я думаю, в конце концов, мне интересно, стоит ли разработка для Medium Trust всех усилий? Кто-нибудь зарабатывает деньги на разработке веб-приложений, работающих на виртуальном хостинге? Если клиенты используют дешевый хостинг, каковы шансы, что они купят ваше приложение? - person Sam; 06.06.2013