2009-05-20 63 views
2

我目前正在做一些测试,我尝试以编程方式删除网站集。从而我意识到SharePoint的一些奇怪行为。Issus删除网站集

我用下面的代码来测试网站集删除。

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

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

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

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

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

UPDATE:

所以我做了一些更多的调查,并意识到这一定有什么做的SPSiteCollection类返回根网站集的索引,如果没有网站集位于在给定的网址。看起来像一个错误。

回答

1

无论何时您要求SharePoint使用Url查找网站集,它都会尽最大努力返回SPSite,即使这意味着它必须忽略部分Url。

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

但是,当您删除网站集并可能犯拼写错误时,它可能非常危险。 如果您想确保您获得正确的Site Collection,请首先查看SPSite,并检查您获得的SPSite是否具有所需的Url。

BR

1

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

+0

是的,这将是我的工作,首先检查SPSite对象。 – Flo 2009-05-20 15:18:43

1

这听起来像是正是在微软的KB 968474描述的问题 - STSADM可能会无意中删除根网站集,如果使用错误的URL路径。与您的症状类似,使用stsadm -o restore时,“如果URL路径不正确,则会尝试删除和还原对URL的根网站集的唯一有效路径。”

这听起来像我怀疑在底层站点删除API中存在一些错误,正如您怀疑的那样。可能地,该算法寻找“最匹配”而不是“完全匹配”。

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