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?

¿Fue útil?

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:

  1. 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.)
  2. Es posible que esté interrumpiendo la canalización haciendo cosas como establecer HttpContext en nulo (lo he visto antes en soluciones alternativas de SharePoint)
  3. 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.
  4. 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
  5. Es posible que esté utilizando alguna suplantación de PInvoke que hace que la autenticación integrada se vuelva loca
  6. 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.
  7. A una sección HttpModules desordenada también le encanta romper cosas, ¿ha probado una nueva aplicación web sin cambios?
  8. 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
scroll top