Непубличный, вызывающий ошибку разрешений при отражении среднего доверия - PullRequest
0 голосов
/ 18 июня 2009

Должен сказать, что до сих пор мне, наверное, просто повезло, что я никогда не сталкивался с проблемами, связанными с веб-сайтом, работающим в режиме среднего доверия. Я только когда-либо разрабатывал приложения для интрасети или случайно использовал хостинговую компанию, которая работает с полным доверием. Но хост, который меня попросили использовать для недавнего проекта, работает со средним доверием, поэтому я пытаюсь, чтобы мое приложение запускало это. Пара вопросов - я разрабатываю на Windows XP. Можно ли настроить IIS для среднего доверия (проще для отладки) и / или это параметр web.config? По этому предмету имеется множество информации, и кривая обучения крутая.

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

Для каждого FieldInfo как FieldInfo в Type.GetFields (BindingFlags.Instance или BindingFlags.NonPublic или BindingFlags.Public)

Может кто-нибудь уточнить, что это возможный кандидат, особенно. этот непубличный флаг? Это скопированный и вставленный код (Coding Horror подчеркивает риск этого), поэтому я никогда не задумывался об этом. Я предполагаю, что цикл проходит через каждое поле в объекте, как в общедоступных, так и в непубличных полях, и я прочитал, что защищенные поля запрещены с учетом среднего доверия.

Ура, Роб.

Ответы [ 3 ]

3 голосов
/ 24 июня 2009

Извините, Reflection with NonPublic эквивалентен полному доверию.

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

2 голосов
/ 24 июня 2009

Да, веб-сайт на XP можно настроить для работы в режиме среднего доверия:

В разделе добавьте следующее:

<!-- Case is important: it's Medium, not medium -->
<trust level="Medium"/>

И ты там.

Что вы можете обнаружить, так это то, что большинство хостов используют свои сайты со слегка повышенным доверительным отношением «Средний», с некоторыми дополнительными правами, выходящими за пределы по умолчанию - их технические специалисты должны быть в состоянии сказать вам, какие различия у них есть, если они есть. *

Если вы посмотрите:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web_mediumtrust.config

Вы увидите применяемые настройки по умолчанию.

Отражение - это одна из ключевых вещей, которая ограничена в Среднем доверии - из Замечаний на странице GetFields :

Если запрошенное поле не является общедоступным, и у вызывающей стороны нет ReflectionPermission для отражения непубличных объектов вне текущей сборки, этот метод возвращает нулевую ссылку (Nothing в Visual Basic).

Поскольку это потенциально может вернуть значение null, вам, вероятно, следует проверять наличие нуля перед тем, как начать его итерацию, или проверять, что FieldInfo не является нулем / ничем, прежде чем его использовать.

0 голосов
/ 24 июня 2009

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

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