Pergunta

Um quebra-cabeça obscuro, mas que está me deixando completamente louco:

Estou criando uma Política de Gerenciamento de Informações personalizada no MOSS.Implementei IPolicyFeature e meu recurso de política registra-se alegremente configurando um novo SPItemEventReceiver.Todos os novos itens da minha biblioteca disparam os eventos como deveriam e tudo funciona bem.

IPolicyFeature também possui um método ProcessListItem, que deve aplicar retroativamente a política a itens que já estavam na biblioteca (pelo menos, deve fazer isso enquanto continuar retornando true).Exceto que isso não acontece.Aplica a política apenas ao primeiro item na biblioteca, e não tenho absolutamente nenhuma ideia do porquê.

Não parece estar lançando uma exceção e realmente retorna verdadeiro ao processar o primeiro item, e não consigo pensar em mais o que olhar.Qualquer um?

Editar:A resposta de Cory, abaixo, me colocou no caminho certo.Outra coisa estava realmente falhando - não descobri o quê, já que meu windbg-fu não é o que deveria ser, mas suspeito que era algo como "modificar uma coleção enquanto ela está sendo iterada".Meu código estava modificando o SPListItem passado para ProcessListItem e, em seguida, chamando SystemUpdate nele;assim que mudei o código para que ele criasse sua própria variável (apontando exatamente para o mesmo SPListItem) e a usasse, o problema desapareceu ...

Foi útil?

Solução

Só consigo pensar em algumas coisas para tentar.Primeiro, você está desenvolvendo na caixa onde poderá usar o Visual Studio para depurar?Então, apenas passando por isso.

Supondo que não seja o caso - o que eu faria é iniciar o WinDBG e anexá-lo ao processo antes de registrar a política.Ative as exceções de primeira chance para que elas sejam interrompidas sempre que ocorrerem.você pode fazer isso emitindo o comando "sxe clr" assim que for invadido.Aqui estão mais algumas informações sobre o WinDBG:

http://blogs.msdn.com/tess/archive/2008/06/05/setting-net-breakpoints-in-windbg-for-applications-that-crash-on-startup.aspx

O que eu faria é observar o lançamento de exceções do First Chance e executar um !PrintException para ver o que está acontecendo.Meu palpite é que há uma exceção lançada em algum lugar que está fazendo com que o aplicativo pare de processar os outros itens.

Como é a lógica do seu ProcessListItem?Você já tentou apenas retornar true para ter certeza de que funciona?

Outras dicas

Algumas ideias legais aí, obrigado.O depurador do Visual Studio não estava mostrando uma exceção (e eu envolvi tudo em blocos try/catch por precaução), mas não pensei em tentar o Windbg...

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