безопасность доступа к коду в ASP.NET 4.0 и ошибка динамических данных - PullRequest
2 голосов
/ 27 февраля 2012

У меня есть некоторые проблемы с моим проектом MVC c #.

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

Попытка прозрачного метода безопасности 'System.Runtime.Diagnostics.DiagnosticTrace..ctor (System.String, System.Guid) для доступа к критичному методу безопасности «System.Runtime.Diagnostics.EtwDiagnosticTrace..ctor (System.String, System.Guid) 'не удалось.

Сборка 'System.ServiceModel.Internals, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' отмечена значком AllowPartiallyTrustedCallersAttribute и использует уровень безопасности 2 модель прозрачности. Прозрачность уровня 2 вызывает все методы в AllowPartiallyTrustedCallers сборки становятся прозрачными для безопасности по умолчанию, что может быть причиной этого исключения. "

Следовательно, я искал в интернете, и были найдены две возможности для его решения. Первые работы, включив этот фрагмент в assemblyinfo.cs:

[assembly: System.Security.AllowPartiallyTrustedCallers]

но ничего не изменилось ..

Погуглил Я нашел вторую информацию о том, что если я поместу в web.config, это, вероятно, сработает.

<trust legacyCasModel="true" level="Full" />

Но когда я помещаю эту информацию в web.config, я получаю сообщение об ошибке типа

Динамические операции могут выполняться только в однородном AppDomain

Я не знаю, что еще мне нужно сделать ...

Я считаю, что использование microsoft.practices.unity с ASP.NET 4.0 и mvc 4 является основной причиной проблемы. Но использование единства для меня необходимо в зависимости от того, как работает мое приложение.

brgds! Себастьяне.

1 Ответ

5 голосов
/ 27 февраля 2012

В платформе .NET 4.0 новая модель CAS предотвращает вызов любого прозрачного кода безопасности в критический код безопасности

Из исключения, которое вы описали выше, кажется, что оба метода, которые вы вызываете, принадлежатвнешняя библиотека (пространство имен System.Runtime.Diagnostics), а не ваш код или даже ваша сборка.

Тот факт, что один метод внешней библиотеки вызывает при попытке доступа к другому методу этой библиотеки, указывает на возможностьошибки в этой библиотеке или какой-то проблемы с двоичным кодом или несоответствием конфигурации (в соответствии с этим потоком http://social.msdn.microsoft.com/Forums/en-US/netfxsetup/thread/a8ceb77b-f625-4259-94de-4ae5157ba98c)

"legacyCasModel" переключается на неоднородные (или просто CAS 1) домены приложений. Это означает, чтодинамический и старый параметр CAS несовместим.Кроме того, MVC 3 использовал динамический в своем собственном коде (см. динамический ViewBag в ASP.NET MVC 3), поэтому, скорее всего, MVC 4 делает то же самое.

ВместоПереключившись на устаревшую версию cas 1, вы можете попробовать добавить сборку с именами System.Runtime.Diagnostics.перейти к FullTrustAssemblies Раздел вашего файла web.config

http://msdn.microsoft.com/en-us/library/system.web.configuration.fulltrustassembliessection.aspx

...