Я разрабатываю решение для SharePoint 2007 и много использую SPSecurity.RunWithElevatedPrivileges, передавая UserToken из SystemAccount.
После прочтения http://hristopavlov.wordpress.com/2009/01/19/understanding-sharepoint-sprequest/ я наконец начал понимать, почему я получаю эти System.Runtime.InteropServices.COMException (0x80010102): Попытка сделать вызовы более чем в одном потоке в однопоточном режиме. (Исключение из HRESULT: 0x80010102 (RPC_E_ATTEMPTED_MULTITHREAD)) ошибки, но, похоже, нет решения - «известная проблема в продукте»
Статье больше года. Я не смог найти что-нибудь более свежее и полезное, но я надеялся, что, может быть, кто-то еще имеет?
Мой код выглядит так
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite elevatedSite = new SPSite(web.Site.ID, web.Site.SystemAccount.UserToken))
{
using (SPWeb elevatedWeb = elevatedSite.OpenWeb(web.ID))
{
// some operations on lists and items obtained through elevatedWeb
}
}
}
Ошибки появляются там, где используется такой повышенный код, и чаще, когда есть больше пользователей, использующих эти функции, поэтому я думаю, что повышенный SPSite кэшируется и используется повторно.
Есть ли способ решить это? Если мое понимание верно, как заставить Sharepoint забыть о кэшированных SPS-сайтах и использовать вместо этого новый?
Спасибо