2

我目前正在做一些测试,我尝试以编程方式删除网站集。因此,我意识到 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、空字符串或未连接到网站集的 url 调用该方法时,SharePoint 会删除位于根目录下的网站集(例如http://wssdev06/)。

我不确定我是否太过于使用此 SPSiteCollection.Delete() 方法,或者我是否不了解网站集和托管路径的相关性,但我认为这是一个非常奇怪和令人担忧的行为。

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

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

更新:

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

4

3 回答 3

1

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

于 2009-05-20T15:12:54.623 回答
1

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

有时这是一件非常好的事情。fi 如果你有一个列表的完整 url 并且想要找到对应的 SPSite 和 SPWeb。

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

BR

于 2009-05-23T18:52:54.440 回答
1

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

正如您所怀疑的,在我看来,底层站点删除 API 中存在一些错误。该算法可能会寻找“最接近的匹配”而不是“精确匹配”。

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

于 2009-05-25T01:52:43.173 回答