Pregunta

Actualmente estoy haciendo un poco de prueba en la que intento eliminar una colección de sitios mediante programación. De esta manera me di cuenta de un comportamiento extraño por SharePoint.

I utilizado el código siguiente para probar la eliminación colección de sitios.

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

Así que cuando llamo al método con el URL de una colección de sitios existente se borrará la colección de sitios como se esperaba. Pero cuando llamo el método con null, la cadena vacía o un URL que no está conectado a una colección de sitios entonces SharePoint elimina la colección de sitios que reside bajo la raíz (por ejemplo, http: // wssdev06 / ).

No estoy seguro de si estoy demasiado volcado a utilizar este método SPSiteCollection.Delete () o si yo no entendía la conecpt de colecciones de sitios y rutas de acceso administradas, pero creo que esto un comportamiento muy extraño y alarmante.

Podría repoduce este behavoir en diferentes aplicaciones web, pero no tenía ninguna opción para probar en otro entorno de SharePoint todavía.

Así que estoy haciendo algo mal o se trata de un error?

ACTUALIZACIÓN:

Así que hice algunas investigaciones más y se dio cuenta de que esto debe tener algo que ver con el indexador de la clase SPSiteCollection que devuelve la colección de sitios raíz si no hay una colección de sitios se encuentra bajo la URL dada. Parece un error.

¿Fue útil?

Solución

Siempre que preguntas SharePoint para encontrar una colección de sitios mediante una dirección URL que va a hacer lo mejor es devolver un SPSite incluso si esto significa que tendrá que pasar por alto parte de la URL.

A veces esto es una cosa muy buena. F.I. si usted tiene la URL completa de una lista y desea encontrar el SPSite correspondiente y SPWeb.

Sin embargo, puede ser muy peligroso como cuando se va a eliminar colecciones de sitios y tal vez hacer un error de ortografía. Si desea asegurarse de obtener el derecho de colección de sitios de la búsqueda de la primera SPSite y comprobar que el SPSite se obtiene tiene la dirección URL que desea.

BR

Por

Otros consejos

Su código es correcto. Una idea sería añadir una comprobación de la colección de sitios para asegurarse de que el sitio que desea borrar está en la colección sitios. Me di cuenta de esto no responde a su pregunta.

Esto suena como exactamente el problema descrito en de Microsoft KB 968474 - stsadm puede eliminar inadvertidamente una colección de sitios raíz si la ruta URL errónea utilizada. Al igual que en sus síntomas, al utilizar stsadm - "Si la ruta URL es incorrecta, la eliminación y restauración se atentó contra la única ruta válida que es la colección de sitios raíz de la URL" o restauración,

Me suena como que hay algunos errores en el sitio subyacente eliminar API, como se sospechaba. Posiblemente, el algoritmo busca una "coincidencia más cercana" en lugar de "coincidencia exacta".

Al enumerar las colecciones de sitios y validación de una coincidencia exacta podría ser la mejor manera de evitar esto. Sin embargo, yo no diría que estás haciendo nada mal, ya que está muy cerca del código de ejemplo Microsoft y la documentación de la función da ninguna advertencia acerca de pasar URLs no válidas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top