Hola.

¿Qué tal?

Hace unos días nos hemos enfrentado a un caso curioso el cual queremos compartir.

El cliente esta usando SharePoint 2010 y quería automatizar la creación de sitios web usando el método SPSiteCollection.add(..) . Además, su entorno utilizaba autenticación por Claims no basadasen Windows. El siguiente código lanzaba un Access Denied sin ninguna justificación.

 

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using(SPSite elevatedSite = newSPSite("webAppUrl"))
    {
       SPWebApplication elevatedWebapp = elevatedSite.WebApplication;
        using(SPSitesite = elevatedWebapp.Sites.Add(..)      // -- La excepción producida es Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

 

Tras analizar el volcado de memoria del cliente y nuestros recursos internos se observó que el método SPsitecollection.add(..) no puede ser utilizado en entornos con autenticación por claims donde el proveedor de éstas sea diferente a un Windows Claims provider.

Por lo cual tened en cuenta que para este tipo de automatizaciones en este tipo de escenarios deberíais de usar otro tipo de métodos como SPSite.SelfServiceCreateSite(..) aunque éste también tiene sus particularidades como podéis ver en la documentación de MSDN.

Esperamos que os haya gustado.

¡¡¡Felices Fiestas!!!

Héctor Calvarro Martín. SharePoint Dev. Microsoft Support Engineer for DEV EMEA