【发布时间】:2014-07-04 18:06:21
【问题描述】:
我正在为 SharePoint 2007 开发解决方案,并且我经常使用 SPSecurity.RunWithElevatedPrivileges,传入 SystemAccount 的 UserToken。
阅读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 忘记缓存的 SPSsite,而使用新的?
谢谢
【问题讨论】:
标签: c# sharepoint sharepoint-2007