2009-05-20 12 views
2

Ich mache gerade einen Test, bei dem ich versuche, eine Websitesammlung programmgesteuert zu löschen. Dadurch habe ich ein seltsames Verhalten von SharePoint festgestellt.Issus Löschen einer Websitesammlung

Ich habe den folgenden Code verwendet, um die Löschung der Websitesammlung zu testen.

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

Wenn ich also die Methode mit der URL einer vorhandenen Websitesammlung aufrufen, wird die Websitesammlung wie erwartet gelöscht. Aber wenn ich die Methode mit null aufrufen, die leere Zeichenfolge oder eine URL, die nicht mit einer Websitesammlung verbunden ist, dann löscht SharePoint die Websitesammlung, die sich unter root befindet (z. B. http://wssdev06/).

Ich bin mir nicht sicher, ob ich zu Dump bin, um diese SPSiteCollection.Delete() -Methode zu verwenden, oder wenn ich das conecpt von Websitesammlungen und verwalteten Pfaden nicht verstanden habe, aber ich halte das für ein merkwürdiges und alarmierendes Verhalten.

Ich könnte dieses Verhalten auf andere Webanwendung neu erstellen, hatte aber keine Option, in einer anderen SharePoint-Umgebung noch zu testen.

Also mache ich etwas falsch oder ist das ein Fehler?

UPDATE:

Also habe ich noch ein paar Untersuchungen und erkannte, dass dies etwas mit dem Indexer der SPSiteCollection Klasse zu tun haben müssen, die die Stammwebsitesammlung zurück, wenn es keine Websitesammlung ist unter der gegebenen Lage url. Sieht nach einem Fehler aus.

Antwort

1

Wenn Sie SharePoint bitten, eine Websitesammlung mithilfe einer URL zu finden, empfiehlt es sich, eine SPSite zurückzugeben, auch wenn dies bedeutet, dass ein Teil der URL ignoriert werden muss.

Manchmal ist das eine sehr gute Sache. f.i. wenn Sie die vollständige URL einer Liste haben und die entsprechende SPSite und SPWeb finden möchten.

Aber es kann sehr gefährlich sein, wie wenn Sie Websitesammlungen löschen und möglicherweise einen Rechtschreibfehler machen. Wenn Sie sicherstellen möchten, dass Sie die richtige Site Collection erhalten, suchen Sie zuerst die SPSite und überprüfen Sie, ob die SPSite, die Sie erhalten, die gewünschte URL hat.

BR

Per

1

Ihr Code sieht richtig aus. Ein Gedanke wäre, eine Überprüfung der Websitesammlung hinzuzufügen, um sicherzustellen, dass sich die Website, die Sie löschen möchten, in der Websitesammlung befindet. Ich weiß, das beantwortet deine Frage nicht.

+0

Ja, das wäre meine Aufgabe, zuerst nach dem SPSite-Objekt zu suchen. – Flo

1

Das ist wie genau in Microsofts KB 968474 beschrieben das Thema klingt - stsadm kann eine Stammwebsitesammlung, wenn fehlerhafte URL-Pfad verwendet versehentlich löschen. Ähnlich wie bei Ihren Symptomen, wenn Sie stsadm - o restore verwenden: "Wenn der URL - Pfad nicht korrekt ist, wird die Löschung und Wiederherstellung für den einzigen gültigen Pfad versucht, der die Stammwebsitesammlung der URL ist."

Es klingt für mich wie es ist ein Bug in der zugrunde liegenden Website löschen API, wie Sie vermutet. Möglicherweise sucht der Algorithmus nach einer "engsten Übereinstimmung" statt nach einer "genauen Übereinstimmung".

Das Auflisten der Websitesammlungen und das Überprüfen einer genauen Übereinstimmung ist möglicherweise der beste Weg, dies zu vermeiden. Ich würde jedoch nicht sagen, dass Sie irgendetwas falsch machen, da dies dem Microsoft-Beispielcode sehr ähnlich ist und die Dokumentation für die Funktion keine Warnung über die Übergabe ungültiger URLs gibt.

Verwandte Themen