Pregunta

Un acertijo oscuro, pero que me está volviendo completamente loco:

Estoy creando una política de gestión de información personalizada en MOSS.Implementé IPolicyFeature y mi función de política se registra felizmente configurando un nuevo SPItemEventReceiver.Todos los elementos nuevos en mi biblioteca activan los eventos como deberían y todo funciona bien.

IPolicyFeature también tiene un método ProcessListItem, que se supone que aplica retroactivamente la política a los elementos que ya estaban en la biblioteca (al menos, se supone que debe hacerlo mientras siga regresando). true).Excepto que no es así.Sólo aplica la póliza a los primero artículo en la biblioteca, y no tengo ni idea de por qué.

No parece estar generando una excepción, y realmente devuelve verdadero al procesar ese primer elemento, y no se me ocurre qué más mirar.¿Alguien?

Editar:La respuesta de Cory, a continuación, me puso en el camino correcto.De hecho, algo más estaba fallando: no descubrí qué, ya que mi windbg-fu no es lo que debería ser, pero sospecho que fue algo así como "modificar una colección mientras se repite".Mi código estaba modificando el SPListItem que se pasó a ProcessListItem y luego llamando a SystemUpdate en él;tan pronto como cambié el código para que creara su propia variable (apuntando exactamente al mismo SPListItem) y la usé, el problema desapareció...

¿Fue útil?

Solución

Sólo se me ocurren un par de cosas para probar.Primero, ¿está desarrollando en el cuadro donde podría usar Visual Studio para depurar?Así que simplemente atravesándolo.

Suponiendo que ese no sea el caso, lo que haría es iniciar WinDBG y adjuntarlo al proceso justo antes de registrar la política.Active las excepciones de primera oportunidad para que se interrumpan cada vez que ocurran.puede hacerlo emitiendo el comando "sxe clr" una vez que esté integrado.Aquí hay un poco más de información sobre WinDBG:

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

Lo que haría es observar si se lanzan excepciones de Primera Oportunidad y hacer una !PrintException para ver qué está pasando.Supongo que se está lanzando una excepción en algún lugar que hace que la aplicación deje de procesar los otros elementos.

¿Cómo se ve la lógica para su ProcessListItem?¿Has intentado simplemente devolver verdadero para asegurarte de que funciona?

Otros consejos

Algunas buenas ideas, gracias.El depurador de Visual Studio no mostraba una excepción (y he incluido todo en bloques try/catch por si acaso), pero no había pensado en probar Windbg...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top