Pergunta

Eu descobri isso SPContext.Current.Web.CurrentUser realmente não é confiável.Uma em cada dez solicitações desse objeto retorna como null.

Existe uma alternativa para SPContext.Current.Web.CurrentUser?

Alguém mais viu essa falta de confiabilidade?

Existe uma solução por aí?

Foi útil?

Solução

Seria legal se você postasse o código ofensivo e seus arredores, mas algumas coisas devem ser consideradas:

  1. Você pode estar obtendo o objeto muito cedo no ciclo de vida (digamos, métodos PreInit e outros, ou um HttpModule etc.)
  2. Você pode estar quebrando o pipeline fazendo coisas como definir o HttpContext como nulo (já vi isso em soluções alternativas do SharePoint antes)
  3. Você pode estar atrás de um proxy reverso como Apache ou Nginx deixando seus KeepAlives enlouquecidos, tente testar o código fora do seu ambiente
  4. E alguns "é o sinal verde" para problemas de hardware, pool de aplicativos atingindo o máximo de RAM ou falta dela, SQL Server ocupado
  5. Você pode estar usando alguma representação PInvoke que faz com que a autenticação integrada enlouqueça
  6. Se você estiver usando FBA, as configurações do provedor e a disponibilidade de back-end (AD, arquivo XML, associação SQL) podem estar falhando - mas isso é improvável, pois seria um erro diferente.
  7. Uma seção HttpModules bagunçada também adora quebrar as coisas. Você já tentou um novo WebApplication sem nenhuma alteração?
  8. Gosto do número oito, então pensei que deveria dar oito ideias vagas

DR:Poste seu código :)

Outras dicas

Só experimentei isso quando esqueço que estou chamando isso fora de contexto.

você tem certeza de que não está tentando chamar isso de dentro SPSecurity.RunWithElevatedPrivileges() ?

por favor tente com isso ..

SPWeb spWeb = Microsoft.SharePoint.WebControls.SPControl.GetContextWeb(System.Web.HttpContext.Current);
SPUser user = spWeb.CurrentUser;

ou

using (SPSite spsite = new SPSite(url))
                {
                    using (SPWeb spweb = spsite.OpenWeb())
                    {
                       userObj = spweb.CurrentUser;
                    }
                }

por favor, tente também com RunWithElevatedPreviliges () ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top