Подтвердить что ты не робот

Является ли попытка разработать для Среднего доверия потерянное дело?

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

В вашем случае:

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

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

Nhibernate ProxyGenerator

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

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

AutoFac

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

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