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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top