У меня есть веб-часть, которая обращается к объектной модели SP, упакованной в сборку, которая подписана и развернута в GAC. Web.config настроен для доверия «Полный», и все же моя веб-часть выбрасывает SecurityException
. Нарушившая строка коды:trust set to Full, но веб-часть по-прежнему вызывает SecurityException
SPSecurity.RunWithElevatedPrivileges(new SPSecurity.CodeToRunElevated(() =>
{
foreach (SPGroup g in user.Groups)
{
identity += String.Format(",'{0}'", g.Name.ToLowerInvariant().Replace(@"\", @"\\"));
}
}));
Представляется, что исключение, когда RunWithElevatedPrivileges
называется (другими словами, мой делегат не выполняет вообще). Есть идеи? На данный момент я полностью сбит с толку.
обновление: вот что код выглядел как прежде, чем я завернул его в методе RunWithElevatedPrivileges:
public MyWebPart()
{
context = new MyProject.Data.MyDataContext(ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString);
SPUser user = SPContext.Current.Web.CurrentUser;
identity = String.Format("'{0}'", user.LoginName.ToLowerInvariant().Replace(@"\", @"\\"));
foreach (SPGroup g in user.Groups)
{
identity += String.Format(",'{0}'", g.Name.ToLowerInvariant().Replace(@"\", @"\\"));
}
identity = '[' + identity + ']';
}
И за исключение:
System.Security.SecurityException occurred
Message="Request failed."
Source="Microsoft.SharePoint"
StackTrace:
at Microsoft.SharePoint.SPBaseCollection.System.Collections.IEnumerable.GetEnumerator()
at MyProject.MyWebPart..ctor()
InnerException:
на основе блика, представленный помощник исключения , похоже, что попыткой доступа к свойству SPUser.Groups является проблема: user.Groups
.
Что меня очень смущает, так это то, что этот точный код работал нормально два дня назад, но у меня были другие проблемы с фермой и в основном пришлось его перестроить. Получив все остальное, я пошел и попытался добавить эту веб-часть на страницу, и эта проблема проявилась. Я попробовал обернуть код в обертке RunWithElevatedPrivileges
, чтобы узнать, могу ли я изолировать именно оскорбительный бит, но похоже, что все, что касается модели SP oject, вызывает исключение, включая метод RunWithElevatedPrivileges
.
update2: Я до сих пор не знаю реальной причины, по которой это было неудачно, но это происходило, когда я пытался добавить веб-часть. После установки контрольных точек в отладчике я понял, что конструктор вызывается дважды; в первый раз все работало точно так, как ожидалось, но во второй раз было исключение. Я до сих пор не знаю, почему. Я нашел два способа обойти это: переместить код нарушителя из конструктора в более позднюю точку жизненного цикла веб-части или закомментировать код для добавления веб-части, затем раскомментировать его и повторно развернуть.
По-видимому, причина, по которой это «работало 3 дня назад», состояла в том, что я давно добавил свою веб-часть на страницу, а затем добавил этот код к конструктору. Поскольку веб-часть уже была добавлена, я никогда не видел никаких проблем. Позже, когда мне недавно пришлось перестроить сайт и снова добавить веб-страницу на страницу, эта проблема проявилась. Так что технически это не «работало» раньше, я просто не делал того, что делало его неправильным.
В любом случае, как я уже сказал, я до сих пор не знаю истинной причины исключения, поэтому ответы на эти строки по-прежнему приветствуются.
Перемещение кода из конструктора веб-части помогло мне с аналогичной проблемой. Спасибо за обновление вопроса. –
Кто-нибудь знает, почему это происходит из конструктора? – xdhmoore