Я вижу несколько возможных проблем с вашим кодом ...
1. Не заворачивайте SPWeb web = sitecollection.RootWeb
в Using
заявлении
Хотя обычно это хорошая практика для переноса объектов SPSite и SPWeb в операторы Using
для обеспечения правильного их удаления, свойство SPSite.RootWeb
исключение из этого правила. Корневое полотно размещено автоматически вместе с объектом SPSite, когда оно расположено. Поскольку у вас есть SPSite siteCollection = new SPSite(...
, завернутый в заявление Using
, вам не нужно беспокоиться об утилизации RootWeb
.
Попытка утилизации корневой сети дважды добавит ошибки в ваши журналы и может вызвать проблемы при обращении к этому веб-объекту программно.
2. Инстанцировать ваш SPSite и объекты SPWeb внутри SPSecurity.RunWithElevatedPrivileges
делегата
Для SPSecurity.RunWithElevatedPrivileges
, чтобы быть эффективной, вы должны получить или создать SPSite и объекты SPWeb в функции делегата.
Ваш код получает объекты SPSite и SPWeb до запуска RunWithElevatedPrivileges
, поэтому любые операции над этими объектами будут выполняться в контексте текущего пользователя вместо запуска с повышенными привилегиями.
3. Проверьте, чтобы убедиться, что объект SPWeb является действительным PublishingWeb перед выполнением GetPublishingWeb(web)
От Microsoft:
Перед тем, как использовать этот метод, проверьте метод IsPublishingWeb, чтобы подтвердить, что поведение публикации поддерживается в этом экземпляре класса SPWeb. Если публикация не поддерживается на SPWeb, то методы и свойства обертки PublishingWeb могут вести себя неожиданно.
После этих изменений, ваш код будет выглядеть следующим образом:
SPSecurity.RunWithElevatedPrivileges(delegate() {
using(SPSite siteCollection = new SPSite("http://****:****/VijaiTest/")) {
SPWeb web = siteCollection.RootWeb;
if(PublishingWeb.IsPublishingWeb(web)){
PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(web);
// Don't show Subsites
publishingWeb.Navigation.GlobalIncludeSubSites = false;
// Don't show Pages
publishingWeb.Navigation.GlobalIncludePages = false;
// Maximum number of dynamic items to show within this level of navigation:
publishingWeb.Navigation.GlobalDynamicChildLimit = 60;
publishingWeb.IncludeInCurrentNavigation = false;
web.AllowUnsafeUpdates = true;
//Update the changes
publishingWeb.Update();
}else{
throw new Exception("Web is not a publishing web");
}
}
});
Что вы имеете в виду "SET область"? – Thriggle