2015-12-22 2 views
1

У меня есть простое веб-приложение MVC 5, работающее на ASP.NET 4.6. Сайт, когда локально настроен в IIS работает, однако, когда сборка выпуска публикуется и загружен в среде виртуального хостинга, я получаю ошибку «Наследование правила безопасности нарушены, а перекрывая элемент»Веб-сайт MVC в среде общедоступного хостинга с ограниченным доверием

Server Error in '/' Application.

Inheritance security rules violated while overriding member: 'SimpleInjector.Integration.Web.Mvc.SimpleInjectorDependencyResolver.GetService(System.Type)'. Security accessibility of the overriding method must match the security accessibility of the method being overriden.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.TypeLoadException: Inheritance security rules violated while overriding member: 'SimpleInjector.Integration.Web.Mvc.SimpleInjectorDependencyResolver.GetService(System.Type)'. Security accessibility of the overriding method must match the security accessibility of the method being overriden.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[TypeLoadException: Inheritance security rules violated while overriding member: 'SimpleInjector.Integration.Web.Mvc.SimpleInjectorDependencyResolver.GetService(System.Type)'. Security accessibility of the overriding method must match the security accessibility of the method being overriden.]

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

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

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

+1

Начиная с .NET 4.0, Microsoft [устарела поддержка частичного доверия] (https://stackoverflow.com/a/17218344/264697) в ASP.NET. Поэтому, даже если вы запустите Simple Injector, вы можете столкнуться с трудностями в ближайшее время, так как Microsoft не будет исправлять какие-либо частичные проблемы доверия, а недавно разработанная логика не будет протестирована для частичного доверия. Как вы можете прочитать в этой ссылке, ваш хостинг-провайдер должен * не * работать в частичном доверии. – Steven

+1

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

ответ

1

Мы забываем отметить этот класс с правильным атрибутом, который теперь вызывает это исключение. Поскольку Microsoft отказывается от частичного доверия к веб-приложениям ASP.NET, мы (участники Simple Injector), вероятно, не будем инвестировать в эту область. Другими словами, не ожидайте, что мы исправим ошибку (скоро).

Чтобы решить эту проблему, внесите свой собственный SimpleInjectorDependencyResolver. Выполнение этого тривиально; это всего лишь несколько строк кода, которые вы можете скопировать из Simple Injector's source code.

+0

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

+0

Не будет ли проигнорирован атрибут? http://stackoverflow.com/questions/27742902/registering-throws-inheritance-security-rules-violated-while-overriding-member –

+0

Если это ваш собственный код, я не думаю, что вам нужен какой-либо атрибут. – Steven

Смежные вопросы