删除网站集的问题

时间:2009-05-20 14:23:55

标签: sharepoint spsite sitecollection

我正在进行一些测试,尝试以编程方式删除网站集。从而我实现了SharePoint的一些奇怪行为。

我使用以下代码测试网站集删除。

private static void DeleteSiteCollection(string urlSiteToDelete)
{
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
       SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://wssdev06"));
       webApp.Sites.Delete(urlSiteToDelete);                    
       webApp.Update();
    });
}

因此,当我使用现有网站集的url调用该方法时,网站集将按预期删除。但是当我使用null,空字符串或未连接到网站集的网址调用方法时,SharePoint会删除驻留在根目录下的网站集(例如http://wssdev06/)。

我不确定我是否倾向于使用此SPSiteCollection.Delete()方法,或者如果我不理解网站集和托管路径的概念,但我认为这是一个非常奇怪且令人担忧的行为。

我可以在不同的Web应用程序上重现此行为,但是没有选择在另一个SharePoint环境中进行测试。

我做错了什么或这是一个错误?

更新

所以我做了一些调查,并意识到这必须与SPSiteCollection类的索引器有关,如果在给定的url下没有网站集,则返回根网站集。看起来像个bug。

3 个答案:

答案 0 :(得分:1)

每当您要求SharePoint使用Url查找网站集时,它最好返回SPSite,即使这意味着它必须忽略部分网址。

有时这是一件非常好的事情。 f.i.如果你有一个列表的完整网址,并想找到相应的SPSite和SPWeb。

但是,当您删除网站集时可能会造成拼写错误,这可能非常危险。 如果您想确保获得正确的网站集,请首先查找SPSite并检查您获得的SPSite是否具有您想要的网址。

BR

答案 1 :(得分:1)

这听起来与Microsoft的KB 968474中描述的问题完全相同 - 如果使用错误的URL路径,stsadm可能会无意中删除根网站集。与您的症状类似,当使用stsadm - o restore时,“如果URL路径不正确,则尝试删除和恢复唯一有效的路径,即URL的根网站集。”

听起来像我怀疑底层网站删除API中存在一些错误。可能,该算法寻找“最接近的匹配”而不是“完全匹配”。

枚举网站集并验证完全匹配可能是避免这种情况的最佳方法。但是,我不会说你做错了,因为这与Microsoft示例代码非常接近,并且该函数的文档没有提供有关传递无效URL的警告。

答案 2 :(得分:1)

您的代码看起来正确。一种想法是添加对网站集的检查,以确保您要删除的网站位于网站集中。我意识到这不能回答你的问题。