2009-05-20 117 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的警告。