Problema de permissões usando SPJobDefinition
-
09-12-2019 - |
Pergunta
Eu tenho um SPJobDefinition (WSS) que é executado a cada hora.Com base em alguns valores, e se atendidos, adiciona um item à lista de calendário.Esta lista de calendário possui um receptor de eventos anexado ao evento ItemAdded.
Quando o trabalho é acionado e adiciona o item, partes do código são executadas.O que quero dizer é que ele não grava no log de eventos e parece ter problemas ao ler o arquivo web.config.
Se eu adicionar manualmente um item à lista de calendários, usando minhas credenciais, tudo funcionará bem.Ou seja, tenho eventos no log de eventos e os itens são lidos no arquivo web.config.
Posso ver onde a conta do sistema está adicionando o item na lista Calendário.Tentei adicionar a conta do sistema aos grupos com controle total e ainda estou tendo problemas.
Há algo mais que preciso examinar para que isso funcione?Verifiquei o usuário do pool e seu serviço de rede;Desde então, eu os adicionei ao grupo também.
Não tenho certeza de onde mais procurar.
Obrigado
Atualizado (este é o código que uso para escrever no log de eventos)
try
{
System.Security.Principal.WindowsImpersonationContext wic = System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero);
EventLog.WriteEntry(source, message, type);
wic.Undo();
}
catch (Exception)
{
}
Solução
A gravação no log de eventos pode ocorrer devido à falta de permissões do Windows.
O trabalho de timer é executado em um serviço do Windows que não possui um web.config.Um receptor de evento é executado em qualquer processo que esteja causando o evento.Portanto, se você tentar ler o web.config do processo atual, ele falhará.
Se você tentar acessar o sistema de arquivos para ler o web.config, poderão ser as permissões do Windows novamente.
Adicionar usuários a grupos do SharePoint não pode ajudá-lo com acesso ao EventLog ou arquivos; esses são objetos do Windows e não objetos do SharePoint.
Ao executar a partir de um trabalho de timer, o Impersonate(IntPtr.Zero);
não está mudando nada.Ele personifica a conta do processo que já está em execução.