SPSite构造函数问题“操作已中止”

时间:2009-08-11 14:44:52

标签: sharepoint sharepoint-2007

警告:我是一名asp.net开发人员,正在迈出第一步。

因此,我正在编写一个连接到同一台计算机上的SharePoint Server 2007站点的控制台应用程序,但在调用SPSite()构造函数期间似乎出现了问题。这是简化的代码:

using (SPSite siteCollection = new SPSite("http://server/AwesomeSite"))
{

  //when i set a breakpoint on this line and inspect the siteCollection object, 
  //most of it's properties (for example siteCollection.AllWebs.Names) throw an 
  //exception, which leads me to the conclusion that something went wrong during 
  //the constructor above.

  SPWebCollection site = siteCollection.AllWebs;
  SPWeb web = site[""];
  SPList list = web.Lists["AwesomeList"]; //exception occurs here
}

SPException文本:

Operation aborted (Exception from HRESULT: 0x80004004 (E_ABORT))

我按照Sharepoint SPSite的建议检查了:

  1. 用户是服务器场管理员。
  2. 用户对内容数据库具有读写权限。
  3. 该用户是网站集管理员。
  4. 用户有权访问代码重复的Windows SharePoint Services网站或SharePoint Server 2007网站。
  5. 他们都是正确的。还有什么可能导致这种情况发生?

5 个答案:

答案 0 :(得分:4)

根据我的经验,SPSite()构造函数高度依赖于您网站的Alternate Access Mappings configuration。确保您在构造函数中使用的URL出现在映射列表中(例如,http与https,机器与FQDN)。

答案 1 :(得分:2)

您需要获取更多调试信息。

使用Visual Studio

尝试设置调试器以中断所有异常。转到调试例外并勾选公共语言运行时例外。然后转到工具选项调试并取消选中启用我的代码。最后附加到w3wp.exe。尝试立即运行您的控制台应用程序,您应该发现它在w3wp.exe中触发了异常。检查堆栈跟踪,看看是否能为您提供更多信息。

使用转储文件

您也可以尝试从崩溃转储中工作。无可否认,这显然更为核心,但应该为您提供您缺乏的细节。工具ProcDump可以附加到w3wp.exe(如果未使用-s开关),并且如果发生未处理的异常,将创建转储。如果您在使用ProcDump时遇到问题,请尝试执行类似的ADPlus

从创建的转储文件中,使用this KB article设置WinDbg并开始使用。有一个示例如何在Tess Ferrandez's blog (Strategy #2)上使用WinDbg。

答案 2 :(得分:1)

您是否尝试使用提升的权限运行代码?

IIs是否有某种关于身份验证的时髦设置? (仅尝试使用Windows身份验证)

答案 3 :(得分:1)

不幸的是,有数百种方法可以生成此错误。只需询问Google

您可以考虑使用SPTraceView来更好地描述错误。这是该工具的descriptionexample处理它的问题。

祝你好运!

答案 4 :(得分:0)

我有类似(不等于)的问题。我用这段代码解决了它:

using( SPSite site = ConnectToSharepointAsSystem() ) {
   // now should be all ok
}

// somewhere in helper class ->
public static SPUserToken GetSystemToken(SPSite site) {
    SPUserToken token = null;
    bool tempCADE = site.CatchAccessDeniedException;
    try {
        site.CatchAccessDeniedException = false;
        token = site.SystemAccount.UserToken;
    }
    catch (UnauthorizedAccessException) {
        SPSecurity.RunWithElevatedPrivileges(() => {
            using (SPSite elevSite = new SPSite(site.ID))
                token = elevSite.SystemAccount.UserToken;
        });
    }
    finally {
        site.CatchAccessDeniedException = tempCADE;
    }
    return token;
}

public static Microsoft.SharePoint.SPSite ConnectToSharepoint() {
    string urlSharepointSite;
    var ret = ConnectToSharepoint(out urlSharepointSite);
    return ret;
}
public static Microsoft.SharePoint.SPSite ConnectToSharepoint(out string urlSharepointSite) {
    urlSharepointSite = "http://www.domain.org";
    var site = new Microsoft.SharePoint.SPSite( urlSharepointSite );
    return site;
}
public static Microsoft.SharePoint.SPSite ConnectToSharepointAsSystem() {
    string urlSharepointSite;
    Microsoft.SharePoint.SPUserToken userToken = null;
    using (var tmpSite = CSharepointNastroje.PripojitNaSharepoint( out urlSharepointSite )) {
        userToken = GetSystemToken(tmpSite);
    }
    var site = new Microsoft.SharePoint.SPSite(urlSharepointSite, userToken);
    return site;
}