¿Existe una alternativa a SPContext.Current.Web.CurrentUser?
Pregunta
he encontrado que SPContext.Current.Web.CurrentUser
Es realmente poco confiable.Una de cada diez solicitudes de que el objeto regrese como null
.
¿Existe una alternativa a SPContext.Current.Web.CurrentUser
?
¿Alguien más ha visto esta falta de fiabilidad?
¿Existe alguna solución?
Solución
Sería genial si publicaras el código ofensivo y su entorno, pero hay algunas cosas que debo considerar fuera de mi cabeza:
- Es posible que esté obteniendo el objeto demasiado temprano en el ciclo de vida (por ejemplo, métodos PreInit y demás, o un HttpModule, etc.)
- Es posible que esté interrumpiendo la canalización haciendo cosas como establecer HttpContext en nulo (lo he visto antes en soluciones alternativas de SharePoint)
- Es posible que esté detrás de un proxy inverso como Apache o Nginx haciendo que su KeepAlives se vuelva loco, intente probar el código fuera de su entorno.
- Y algunos "es la luz verde" para problemas de hardware, el grupo de aplicaciones alcanza la RAM máxima o falta de ella, SQL Server está ocupado
- Es posible que esté utilizando alguna suplantación de PInvoke que hace que la autenticación integrada se vuelva loca
- Si está utilizando Logística de Amazon, la configuración del proveedor y la disponibilidad del backend (AD, archivo XML, membresía SQL) podrían estar fallando, pero es poco probable que se trate de un error diferente.
- A una sección HttpModules desordenada también le encanta romper cosas, ¿ha probado una nueva aplicación web sin cambios?
- Me gusta el número ocho, así que pensé que debería darle ocho ideas vagas.
TL;DR:Publica tu código :)
Otros consejos
Sólo he experimentado esto cuando olvido que lo estoy llamando fuera de contexto.
¿Estás seguro de que no estás intentando llamar a esto dentro? SPSecurity.RunWithElevatedPrivileges()
?
Por favor intenta con esto..
SPWeb spWeb = Microsoft.SharePoint.WebControls.SPControl.GetContextWeb(System.Web.HttpContext.Current);
SPUser user = spWeb.CurrentUser;
o
using (SPSite spsite = new SPSite(url))
{
using (SPWeb spweb = spsite.OpenWeb())
{
userObj = spweb.CurrentUser;
}
}
Por favor, intente también con RunWithElevatedPreviliges()...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a sharepoint.stackexchange