警告:我是一名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的建议检查了:
他们都是正确的。还有什么可能导致这种情况发生?
答案 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来更好地描述错误。这是该工具的description和example处理它的问题。
祝你好运!答案 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;
}