Error al acceder a la consulta de los sitios de una webapplication
-
miércoles, 19 de diciembre de 2012 21:09
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
Todas las respuestas
-
miércoles, 19 de diciembre de 2012 21:44
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
-
jueves, 20 de diciembre de 2012 8:18
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_DiazMicrosoft Community Contributor 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 15:05
Hola a todos, muchas gracias a Martin y Adrian; con sus observaciones me funcionó mí webPart.
Muchas gracias y Feliz Navidad.
Saludos,
yenni

