2013-07-01 3 views
0

Мне нужно сохранить динамически созданный xmldatasource для меню в кеше на основе пользователя входа. Следующий код возвращает те же данные для всех пользователей, так как я не упоминал пользователя входа. где мне нужно указать имя входа во время добавления кеша? также я хочу сбросить или удалить кеш, добавив новый сайт из приемника событий, так как карта сайта должна воссоздать.Как кэшировать в sharepoint 2010 на основе пользователя входа

private static object _lock = new object(); 

    public XmlDocument CacheData() 
    {    
     XmlDocument item; 
     lock (_lock) 
     { 
      item = (XmlDocument)Cache["SiteMapCache"]; 
      if (item == null) 
      { 
       using (SPSite site = new SPSite(SPContext.Current.Site.Url)) 
       { 
        SPWebApplication webapp = site.WebApplication; 
        item = GenerateMenu(webapp); 
       } 
       Cache.Add("SiteMapCache", 
        item, null, 
        DateTime.Now.AddMinutes(1), 
        System.Web.Caching.Cache.NoSlidingExpiration, 
        System.Web.Caching.CacheItemPriority.Default, 
        null); 
      } 
      return item; 
     } 
    } 

ответ

0

1 Не знаете, почему вы это сделаете. Как будто вы создали сайт публикации Sharepoint OOTB, появятся дополнительные подсайты, к которым пользователь имел доступ. Если вы запустили корневой каталог кэширования, каждый из них может содержать множество записей в кеше, поскольку каждый из них должен быть другим.

Else добавить USERName в имя CacheKey.

Затем измените свой код, чтобы он сначала проверял, является ли «SiteMapCache» + Spcontext.Current.Web.CurrentUser.name нулевым, если он извлекает его и сохраняет его как кеш.

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

Затем, если создается новый сайт, проведите через каждый из них и установите кешированный элемент в значение null.

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