none
Не работает имперсонализация в Sharepoint RRS feed

  • Вопрос

  • Добрый день. 

    Я пишу обработчик на добавление файла в библиотеку. Добавленный файл скачивается во временную директорию, и парсится. 

    В коде обработчика ItemAdded использую следующую конструкцию: 

     

    SPSecurity.RunWithElevatedPrivileges(delegate()
              {
                 using (SPSite site = new SPSite(this._siteID))
                 using (SPWeb web = site.OpenWeb(relativeUrl))
                 {//рабочий код, ссылаюсь только через site или web
                 }
              }
    

    После обработки, в зависимости от успеха парсинга, Item'у библиотеки с помощью столбца типа "Выбор" присваивается определенное значение (например, Успешно обработано). 

    Проблема: при заходе под любой учетной записью с достаточными правами с локальной машины код выполняется корректно: в поле "Изменен" выставляется "Системная учетная запись" (от которой, по идее, должен выполняться код). Но при доступе через интернет под теми же учетными записями код не отрабатывает вообще. 

    Подскажите, куда копать? Существует ли какое-то другое решение, помимо взятия token'a конкретно Sharepoint\system? 

    ОС: Windows Server 2008 R2 Enterprise; 

    Sharepoint: 2010. 

    Заранее спасибо =)

     

    • Изменен тип Roman Zhukov 4 мая 2011 г. 13:21
    • Изменен тип Roman Zhukov 5 августа 2011 г. 5:41
    21 апреля 2011 г. 13:46

Ответы

  • Спасибо. Решил проблему следующим образом - отказался от Elevated вообще - он работает с некоторыми ограничениями, которые не документированы, и в ряде случаев элевейта просто не происходит. Использовать его было в принципе ошибочно. 

    А решение нашел такое - не использовать Elevated, + при попадании файла в библиотеку (для обработки которого писался хендлер) заново подключаюсь к SPWeb, и далее к библиотеке и итему по его GUID, взятому из properties хендлера. 


    • Помечено в качестве ответа Roman Zhukov 5 августа 2011 г. 5:42
    4 августа 2011 г. 17:23

Все ответы

  • Попробуйте вместо кода

    using (SPSite site = new SPSite(this._siteID))
                 using (SPWeb web = site.OpenWeb(relativeUrl))

     

    написать SPContext.Current.Web и от этого плясать


    Sergey A Belskiy - Microsoft® Most Valuable Professional, Sharepoint Server || My blog || My Twitter || My Facebook || My Video
    21 апреля 2011 г. 16:07
    Модератор
  • Уважаемый пользователь!
    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме.

    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.
    27 апреля 2011 г. 11:18
  • Подскажите, у вас адрес для доступа из интернет прописан в alternative access mapping? Если нет, то код site.OpenWeb(relativeUrl) может не работать. Можете прислать текст ошибки?
  • Если написать SPContext.Current.Web то смысл от SPSecurity.RunWithElevatedPrivileges пропадет, т.к. вы будете использовать контекст текущего пользователя, а не системной учетки
  • Спасибо. Решил проблему следующим образом - отказался от Elevated вообще - он работает с некоторыми ограничениями, которые не документированы, и в ряде случаев элевейта просто не происходит. Использовать его было в принципе ошибочно. 

    А решение нашел такое - не использовать Elevated, + при попадании файла в библиотеку (для обработки которого писался хендлер) заново подключаюсь к SPWeb, и далее к библиотеке и итему по его GUID, взятому из properties хендлера. 


    • Помечено в качестве ответа Roman Zhukov 5 августа 2011 г. 5:42
    4 августа 2011 г. 17:23