Problemi di eliminazione di una raccolta siti
-
23-08-2019 - |
Domanda
Attualmente sto facendo un po 'di test in cui cerco di eliminare una raccolta siti a livello di codice. In tal modo ho capito qualche strano comportamento da SharePoint.
Ho usato il seguente codice per verificare l'eliminazione raccolta siti.
private static void DeleteSiteCollection(string urlSiteToDelete)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://wssdev06"));
webApp.Sites.Delete(urlSiteToDelete);
webApp.Update();
});
}
Così, quando chiamo il metodo con l'URL di un sito esistente raccolta la raccolta siti verrà eliminata come previsto. Ma quando chiamo il metodo con null, la stringa vuota o un URL che non è collegato a una raccolta siti SharePoint quindi elimina la raccolta siti che risiede sotto radice (ad esempio http: // wssdev06 / ).
Non sono sicuro se sto troppo discarica di utilizzare questo metodo SPSiteCollection.Delete () o se non ho capito il conecpt di raccolte siti e percorsi gestiti, ma penso che questo un comportamento davvero strano e allarmante.
ho potuto repoduce questo behavoir su applicazione web diverso, ma non ha avuto possibilità di provare su un altro ambiente SharePoint ancora.
Così sto facendo qualcosa di sbagliato o si tratta di un bug?
UPDATE:
Così ho fatto alcuni più indagini e si rese conto che questo deve avere qualcosa a che fare con l'indicizzatore della classe SPSiteCollection che restituisce la raccolta siti radice se non esiste una raccolta sito che si trova sotto l'URL dato. Sembra come un insetto.
Soluzione
Ogni volta che si chiede di SharePoint di trovare una raccolta siti utilizzando un URL che farà la cosa migliore è restituire uno SPSite anche se questo significa che si avrà di ignorare parte dell'URL.
A volte questo è una cosa molto buona. F.I. se avete l'URL completo di un elenco e vuoi trovare lo SPSite corrispondente e SPWeb.
Ma può essere molto pericoloso come quando si sta cancellando raccolte siti e magari fare un errore di ortografia. Se si vuole fare in modo si ottiene la giusta raccolta siti la ricerca del SPSite prima e verificare che la SPSite si ottiene ha l'URL che si desidera.
BR
Per
Altri suggerimenti
Il codice guarda a destra. Un pensiero sarebbe quella di aggiungere un controllo della raccolta siti per assicurarsi che il sito che si desidera eliminare è nella collezione siti. Mi rendo conto che questo non risponde alla tua domanda.
Questo suona come esattamente il problema descritto in Microsoft KB 968.474 - stsadm può inavvertitamente eliminare una raccolta siti radice se sentiero URL errato utilizzato. Simile ai vostri sintomi, quando si utilizza stsadm - "Se il sentiero URL sia corretta, si l'eliminazione e ripristino viene tentato contro l'unico percorso valido che è la raccolta siti radice del URL" o ripristino,
Sembra a me come c'è qualche bug nel sito sottostante eliminare API, come si sospetta. Forse, l'algoritmo cerca una "più vicina partita" piuttosto che "corrispondenza esatta".
L'enumerazione delle Collezioni del sito e la validazione di una corrispondenza esatta potrebbe essere il modo migliore per evitare questo. Tuttavia, non direi che si sta facendo qualcosa di sbagliato in quanto questo è molto vicino al codice di esempio Microsoft e la documentazione per la funzione non avverte di passare URL non validi.