SPContext.Current为大多数属性抛出SecurityException

时间:2010-02-04 09:41:24

标签: sharepoint exception

SPContext.Current对象的许多属性都会抛出SecurityException。 (与SPContext.Current.Fields类似,SPContext.Current.Site中的许多属性(请参阅详细信息)。

  • DLL在GAC中
  • 尝试使用网站所有者时 属性。
  • 也许它必须做点什么 数据库访问?但是SharePoint 网站正在运行 - 我可以添加列表 物品等。
  • 应用程序池具有以下权限 数据库。我应该设置申请吗? 池帐户作为服务器管理员或它是 没有必要吗?
  • 在我的开发环境中,它 只是工作。

哪里可能是问题?有人可以指出我正确的方向吗?

谢谢。

详细

从立即窗口:

SPContext.Current.Site
{Microsoft.SharePoint.SPSite}
    AllowRssFeeds: true
    AllowUnsafeUpdates: 'SPContext.Current.Site.AllowUnsafeUpdates' threw an exception of type 'System.Security.SecurityException'
    AllWebs: {Microsoft.SharePoint.SPWebCollection}
    ApplicationRightsMask: 9223372036854775807
    Audit: {Microsoft.SharePoint.SPAudit}
    CatchAccessDeniedException: true
    CertificationDate: 'SPContext.Current.Site.CertificationDate' threw an exception of type 'System.Security.SecurityException'
    ContentDatabase: {Microsoft.SharePoint.Administration.SPContentDatabase}
    CurrentChangeToken: 'SPContext.Current.Site.CurrentChangeToken' threw an exception of type 'System.Security.SecurityException'
    ...

甚至例外也有例外:

Exception Window http://img41.imageshack.us/img41/442/ss20100204112542.png

ULS在此时发生异常,发生异常时: ULS Log http://img715.imageshack.us/img715/465/ss20100204113046.png

事件查看器有很多错误

  • 用于SharePoint搜索索引器(i 没有工作搜索 那一刻,我只是希望它不是 问题)
  • 有关Alternate的错误 访问映射(有时我访问 来自IP地址的SharePoint,而不是来自 主机名,因为主机名无法解析 在我的VPN,但这是一个不同的 问题):

    无法找到源(Windows SharePoint Services 3)中的事件ID(8214)的说明。该    本地电脑可能没有    必要的注册信息或    消息DLL文件以显示消息    从远程计算机。你可能    能够使用/ AUXSOURCE =标志来    检索此描述;看帮助    并支持细节。该    以下信息是其中的一部分    event:请求了一个URL,    http://192.168.0.9,但没有    已在备用访问中配置    映射。一些链接可能指向    的备用访问URL    默认区域http://serveris。    查看备用访问映射    这个Web应用程序在    http://serveris:38590/_admin/AlternateUrlCollections.aspx    并考虑添加    http://192.168.0.9作为公众    备用访问URL(如果有)    经常使用。帮助解决此错误:    http://go.microsoft.com/fwlink/?LinkId=114854

2 个答案:

答案 0 :(得分:1)

我知道我必须使用代码来确保从非Web上下文执行时存在SPContext。

public static void EnsureSPContext(this SPWeb web)
    {
        // Ensure HttpContext.Current
        if (HttpContext.Current == null)
        {
            HttpRequest request = new HttpRequest("", web.Url, "");
            HttpContext.Current = new HttpContext(request,
              new HttpResponse(TextWriter.Null));
        }

        // SPContext is based on SPControl.GetContextWeb(), which looks here
        if (HttpContext.Current.Items["HttpHandlerSPWeb"] == null)
            HttpContext.Current.Items["HttpHandlerSPWeb"] = web;

    }

答案 1 :(得分:0)

啊,这个问题现在已经在第三次踩到同一个耙子后就解决了。

它发生在WebPart构造函数中(不知道它是否起作用,但是继承自Microsoft.SharePoint.WebPartPages.WebPart)并且SPContext对象被搞砸了。

有趣的是它在我的开发环境中有效。