Вопрос

Непонятная загадка, но она сводит меня с ума:

Я создаю собственную политику управления информацией в MOSS.Я реализовал IPolicyFeature, и моя функция политики успешно регистрируется, настраивая новый SPItemEventReceiver.Все новые элементы в моей библиотеке запускают события так, как должны, и все работает нормально.

IPolicyFeature также имеет метод ProcessListItem, который должен задним числом применять политику к элементам, которые уже были в библиотеке (по крайней мере, он должен делать это до тех пор, пока продолжает возвращать данные). true).Но это не так.Политика применяется только к первый предмет в библиотеке, и я понятия не имею, почему.

Кажется, он не генерирует исключение и действительно возвращает true после обработки этого первого элемента, и я не могу придумать, на что еще обратить внимание.Любой?

Редактировать:Ответ Кори ниже направил меня на правильный путь.Действительно, что-то еще не удалось - я не понял, что именно, поскольку мой Windbg-fu не такой, каким должен быть, но я подозреваю, что это было что-то вроде «изменения коллекции во время ее повторения».Мой код изменял SPListItem, переданный в ProcessListItem, а затем вызывал для него SystemUpdate;как только я изменил код так, чтобы он создал собственную переменную (указывающую на тот же SPListItem) и использовал ее, проблема исчезла...

Это было полезно?

Решение

Есть только пара вещей, которые я могу придумать, чтобы попробовать.Во-первых, разрабатываете ли вы систему, на которой можно было бы использовать Visual Studio для отладки?Так что просто пройдите через это.

Если предположить, что это не так, я бы запустил WinDBG и подключил его к процессу непосредственно перед регистрацией политики.Включите исключения первого шанса, чтобы они прерывались всякий раз, когда они происходят.вы можете сделать это, введя команду «sxe clr» после взлома.Вот еще немного информации о WinDBG:

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

Затем я бы наблюдал за появлением исключений First Chance и выполнял бы !PrintException, чтобы увидеть, что происходит.Я предполагаю, что где-то генерируется исключение, из-за которого приложение прекращает обработку других элементов.

Как выглядит логика вашего ProcessListItem?Вы пробовали просто вернуть true, чтобы убедиться, что это работает?

Другие советы

Есть несколько хороших идей, спасибо.Отладчик Visual Studio не показывал исключений (и на всякий случай я обернул все в блоки try/catch), но мне не пришло в голову попробовать Windbg...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top