Question

Je fais actuellement un certain test où je tente de supprimer une collection de sites par programme. De ce fait, j'ai réalisé un comportement étrange par SharePoint.

J'ai utilisé le code suivant pour tester la suppression de collection de sites.

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

Alors, quand j'appelle la méthode avec l'URL d'une collection de sites existants de la collection de sites sera supprimé comme prévu. Mais quand je l'appelle la méthode avec null, la chaîne vide ou une URL qui n'est pas connecté à une collection de sites, puis SharePoint supprime la collection de sites qui se trouve sous la racine (par exemple http: // wssdev06 / ).

Je ne sais pas si je suis larguer trop d'utiliser cette méthode SPSiteCollection.Delete () ou si je ne comprenais pas la conecpt des collections de sites et chemins d'accès gérés, mais je pense que ce comportement vraiment étrange et inquiétant.

Je pourrais repoduce ce behavoir sur différentes applications Web mais n'a pas possibilité de tester sur un autre environnement SharePoint encore.

Alors que je fais quelque chose de mal ou est-ce un bug?

Mise à jour:

Je l'ai fait un peu plus d'enquêtes et rendu compte que cela doit avoir quelque chose à voir avec l'indexeur de la classe SPSiteCollection qui retourne la collection de sites racine s'il n'y a pas de collecte de site situé sous l'URL donnée. On dirait un bug.

Était-ce utile?

La solution

Chaque fois que vous demandez SharePoint de trouver une collection de sites en utilisant une URL, il va le faire, il est préférable de revenir même SPSite si cela signifie qu'il faudra ignorer une partie de l'URL.

Parfois, cela est une très bonne chose. Fi. si vous avez l'URL complète d'une liste et que vous voulez trouver le SPSite correspondant et SPWeb.

Mais il peut être très dangereux comme lorsque vous supprimez des collections du site et peut-être faire une erreur d'orthographe. Si vous voulez vous assurer d'obtenir la bonne collection de sites la recherche de la première SPSite et vérifiez que le SPSite vous a l'URL que vous voulez.

BR

Par

Autres conseils

Votre code semble bon. Une pensée serait d'ajouter un chèque de la collection de sites pour vous assurer que le site que vous souhaitez supprimer dans la collection de sites. Je sais que cela ne répond pas à votre question.

Cela ressemble exactement le problème décrit dans KB 968474 de Microsoft - stsadm peut supprimer par inadvertance une collection de sites racine si le chemin d'URL erronée utilisée. Semblable à vos symptômes, lors de l'utilisation stsadm - «Si le chemin d'URL est incorrect, la suppression et tentative de restauration contre le seul chemin valide qui est la collection de sites racine de l'URL » o Restaurer,

Il me semble que il y a un bogue dans le site sous-jacent supprimer API, comme vous doutiez. Peut-être, l'algorithme recherche un « match le plus proche » plutôt que « correspondance exacte ».

Énumération des collections de sites et de validation pourrait être la meilleure façon d'une correspondance exacte éviter. Cependant, je ne dirais pas que vous faites quelque chose de mal, car cela est très proche de l'exemple de code Microsoft et la documentation de la fonction donne aucun avertissement à passer des URL non valides.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top