Отладка заданий таймера Sharepoint

Я создаю свою первую работу по таймеру и хочу ее отладить. Я установил задание таймера с помощью функции и добавил ее в коллекцию JobDefinitions веб-приложения, а также добавил SPMinuteSchedule для запуска каждые 5 минут (в целях тестирования).

Затем в Visual Studio я попытался подключить отладчик к процессу WebApplication, процессу Central Admin и процессу OWSTIMER.exe, но он не будет отлаживаться в методе выполнения TimerJob. Что мне здесь не хватает.

Постскриптум Состояние задания таймера говорит «успешно», поэтому он работает. Weird ...

Ответы на вопрос(3)

 Marek Kwiendacz21 дек. 2010 г., 23:12
Удивительный, простой метод.

Вы делали отладочную сборку?Вы поместили файл .pdb в ту же папку, что и сборка? (Простопоиск следует объяснить, как - например.Задания отладки таймера)Также прочитайтеОтладка пользовательских заданий таймера на MSDN для некоторых советов.Выполните 3 R: перестроить и повторно развернуть сборку и сбросить службу таймера, прежде чем пытаться подключиться снова.
 Colin12 июн. 2009 г., 11:24
Перестроил проект, удалил сборку вручную с помощью проводника Windows, затем скопировал файл вручную также с помощью проводника, затем снова скопировал pdb, и отладка подключилась к процессу ....
 Colin12 июн. 2009 г., 11:17
Добавил Debug.Assert = false, перезапустил мой компьютер, но OWSTimer не загружает мой pdb (я даже скопировал его в папку c: \ windows \assemly \ GAC_MSIL \ <assemblyname> \ <version> ????
 mundeep12 июн. 2009 г., 15:15
Извинения забыл упомянуть обычный процесс перестройки / повторного / перезапуска, будет редактировать ответ :)
Решение Вопроса

я вставляю утверждение в самом первом начале метода Execute, что всегда будет неудачным. Это приводит к появлению всплывающего окна при каждом вызове метода Execute, поэтому вы можете быть уверены, что TimerJob был запущен и у вас достаточно времени для подключения отладчика. Конечно, вы должны удалить Утверждение, прежде чем начать работу.

System.Diagnostics.Trace.Assert(false);

Еще одна важная вещь заключается в том, что вы перезапускаете службу таймера после развертывания новой библиотеки DLL. В противном случае служба таймера запустит TimerJob из старой библиотеки DLL.

 mundeep12 июн. 2009 г., 15:17
Интересная идея - подтвердить утверждение ... также, если вы используете Debug.Assert вместо Trace.Assert, тогда в любой сборке выпуска этого кода не будет (хотя в какой-то момент в вашей отладочной сборке вы все равно захотите его закомментировать) ,
 Flo13 июн. 2009 г., 15:29
Спасибо за эту информацию. Возможно, вы правы, что Trace.Assert - не лучшее решение.
 Colin12 июн. 2009 г., 11:30
Кажется, сейчас вроде работает ... Очищенное решение и перезапущенный таймер, отладчик работает ...
 JMD12 июн. 2009 г., 23:20
Еще одно замечание: System.Diagnostics.Debugger.Break () должен работать как следует, он предназначен для приостановки работы приложения и обращения к пользователю с просьбой подключить отладчик.
 Flo12 июн. 2009 г., 13:11
Большой! Отладка TimerJobs также вызвала у меня головную боль.

Ваш ответ на вопрос