none
Error al acceder a la consulta de los sitios de una webapplication

    Pregunta

  • Buenas tardes, tengo mi webpart y me funciona únicamente con mi usuario de administrador, cuando uso otro usuario que ya tiene permisos de acceso para acceder a mi webPart y depuro y en el método de consultar los sitios que tiene mi webApplication me sale el siguiente error: "Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack", esto sale en la línea de SPWebCollection collWebsite = oSiteCollection.AllWebs;

    Aunque el usuario está como administrador, pero no como administrador de la colección de sitios que es con el que me genera error.

         public List<SitiosBE> ListarSitios()
            {
                 List<SitiosBE> items = new List<SitiosBE>();
                SPSecurity.RunWithElevatedPrivileges(delegate()
                    {
                        using (SPSite elevatedSite = new SPSite(SPContext.Current.Site.ID))
                        {
                            using (SPWeb elevatedWeb = elevatedSite.OpenWeb(SPContext.Current.Web.ID))
                            {                         
                                SPSite oSiteCollection = SPContext.Current.Site;
                                SPWebCollection collWebsite = oSiteCollection.AllWebs;
    
                                for (int i = 0; i < collWebsite.Count; i++)
                                {
                                    SitiosBE itemSitio = new SitiosBE();
                                    itemSitio.Id = collWebsite[i].ID;
                                    itemSitio.Nombre = collWebsite[i].Title;
                                    items.Add(itemSitio);
                                }
              
    
                            }
                        }
    
                    });
                  return items;
                }

    Yo ya elevé los privilegios pero no se qué más puedo hacer y agradecería su ayuda.

    Gracias,


    yenni


    • Editado yenni miércoles, 19 de diciembre de 2012 21:15
    miércoles, 19 de diciembre de 2012 21:09

Respuestas

  • Hola Yenni

    el principal problema que tiene tu codigo es que independientemente de que eleves los privilegios estas cogiendo el valor del contexto tienes que eliminar la linea donde lo coges del contexto

    SPSite oSiteCollection = SPContext.Current.Site;

    Y la siguiente linea quedaria asi:

    SPWebCollection collWebsite = elevatedSite.AllWebs;
    

    Para mejorar aun mas el codigo no se porque elevas el Web si no haces caso de el con elevar solo el Site seria suficiente.

    Saludos

    • Editado Adrian_DiazMVP jueves, 20 de diciembre de 2012 11:34
    • Marcado como respuesta yenni jueves, 20 de diciembre de 2012 15:05
    jueves, 20 de diciembre de 2012 8:18
  • Buenas tardes,

    Has problado no utilizar el contexto actual, es decir

     public List<SitiosBE> ListarSitios()
            {

                Guid idSiteCollection = SPContext.Current.Site.ID;
                List<SitiosBE> items = new List<SitiosBE>();

                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite elevatedSite = new SPSite(idSiteCollection ))
                    {
                        SPWebCollection webCollection = elevatedSite.AllWebs;
                        int countWeb = webCollection.Count;

                        for (int i = 0; i < countWeb; i++)
                        {
                                SitiosBE itemSitio = new SitiosBE();
                                itemSitio.Id = webCollection[i].ID;
                                itemSitio.Nombre = webCollection[i].Title;
                                items.Add(itemSitio);
                        }
                    }

                });
                return items;

     }

    Aunque daria error de acceso denegado, si utiliza el contexto actual puede dar el error "Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack" en modo de depuración por el mero hecho que el otro proceso esta pillando el fichero .pdb or .dll del elemento web.

    Espero que sea de ayuda, Suerte

    Un saludo


    Martin Luis López Requena


    • Editado Martin Luis López miércoles, 19 de diciembre de 2012 22:14 Modificación de codigo
    • Marcado como respuesta yenni jueves, 20 de diciembre de 2012 15:05
    miércoles, 19 de diciembre de 2012 21:44

Todas las respuestas

  • Buenas tardes,

    Has problado no utilizar el contexto actual, es decir

     public List<SitiosBE> ListarSitios()
            {

                Guid idSiteCollection = SPContext.Current.Site.ID;
                List<SitiosBE> items = new List<SitiosBE>();

                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite elevatedSite = new SPSite(idSiteCollection ))
                    {
                        SPWebCollection webCollection = elevatedSite.AllWebs;
                        int countWeb = webCollection.Count;

                        for (int i = 0; i < countWeb; i++)
                        {
                                SitiosBE itemSitio = new SitiosBE();
                                itemSitio.Id = webCollection[i].ID;
                                itemSitio.Nombre = webCollection[i].Title;
                                items.Add(itemSitio);
                        }
                    }

                });
                return items;

     }

    Aunque daria error de acceso denegado, si utiliza el contexto actual puede dar el error "Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack" en modo de depuración por el mero hecho que el otro proceso esta pillando el fichero .pdb or .dll del elemento web.

    Espero que sea de ayuda, Suerte

    Un saludo


    Martin Luis López Requena


    • Editado Martin Luis López miércoles, 19 de diciembre de 2012 22:14 Modificación de codigo
    • Marcado como respuesta yenni jueves, 20 de diciembre de 2012 15:05
    miércoles, 19 de diciembre de 2012 21:44
  • Hola Yenni

    el principal problema que tiene tu codigo es que independientemente de que eleves los privilegios estas cogiendo el valor del contexto tienes que eliminar la linea donde lo coges del contexto

    SPSite oSiteCollection = SPContext.Current.Site;

    Y la siguiente linea quedaria asi:

    SPWebCollection collWebsite = elevatedSite.AllWebs;
    

    Para mejorar aun mas el codigo no se porque elevas el Web si no haces caso de el con elevar solo el Site seria suficiente.

    Saludos

    • Editado Adrian_DiazMVP jueves, 20 de diciembre de 2012 11:34
    • Marcado como respuesta yenni jueves, 20 de diciembre de 2012 15:05
    jueves, 20 de diciembre de 2012 8:18
  • Hola a todos, muchas gracias a Martin y Adrian; con sus observaciones me funcionó mí webPart.

    Muchas gracias y Feliz Navidad.

    Saludos,


    yenni

    jueves, 20 de diciembre de 2012 15:05