Параметры планирования ядра сайта

#c# #sitecore #job-scheduling

#c# #ядро сайта #планирование заданий

Вопрос:

Проблема

В настоящее время я пытаюсь настроить запланированную задачу Sitecore в базе данных, используя расписания и команды.

До сих пор я следовалhttp://sdn.sitecore.net/FAQ/Administration/Scheduled tasks.aspx для большей части того, что мне было нужно. Их метод использует: public void WriteToLogFile(Item[] itemArray, CommandItem commandItem, ScheduleItem scheduledItem) . Я предполагаю, что это элементы, переданные в элементе расписания, сам командный элемент и сам элемент расписания.

У меня есть функция run, которая следует тому же синтаксису: protected void run(Item[] itemArray, CommandItem commandItem, ScheduleItem scheduleditem) . Однако я получаю исключение, поскольку оно выполняется в моих журналах. Связан стек исключений:http://pastie.org/1847345, но вот вложенное исключение:

 Exception: System.NullReferenceException 
Message: Object reference not set to an instance of an object. 
Source: fhservices at fhservices.twitterPull.run(Item[] itemArray, CommandItem commandItem, ScheduleItem scheduleditem)
  

Я попробовал принять несколько разных комбинаций параметров, но безуспешно.

Раздел веб-конфигурации планирования:

  <scheduling>
  <!-- Time between checking for scheduled tasks waiting to execute -->
  <frequency>00:01:00</frequency>
  <!-- Agent to process schedules embedded as items in a database -->
  <agent type="Sitecore.Tasks.DatabaseAgent" method="Run" interval="00:02:00">
    <param desc="database">core</param>
    <param desc="schedule root">/sitecore/system/tasks/schedules</param>
    <LogActivity>true</LogActivity>
  </agent>
 ...
  

Кто-нибудь знает параметры, которые sitecore отправляет с методами, которые вызываются с помощью этого метода запуска заданий?

Ответ №1:

Согласно фрагменту, на который вы ссылались в SDN, я думаю, вы создаете свой собственный метод, похожий на WriteToLogFile , но не Run() . В шаге 4 говорится:

Заполните необходимые поля:

Тип: пользовательские запланированные задачи.Задача 1, пользовательские запланированные задачи

Метод: WriteToLogFile

Тип указывает пространство имен и файл сборки. Метод указывает метод для вызова в указанном классе.

Теперь ваша команда готова к использованию в качестве запланированной задачи.

Итак, вместо вашего Run() метода назовите его как-нибудь иначе и задайте его в Method поле команды в Sitecore. Run() это метод в DatabaseAgent из Sitecore, который выполняется.

Комментарии:

1. Я изменил это на что-то другое ради того, чтобы просто не быть возможным зарезервированным словом. Посмотрим, как это пойдет.

2. Честно говоря, я думаю, что это могло бы решить проблему? 1. Я изменил метод с именем на pull 2. Я изменил это в соответствующей команде. 3. Возникла проблема, потому что я считаю, что VS не создавал отладочную версию. 4. Заменен файл на правильную сборку. 5. Попытался настроить отладку точки останова и добавил ссылку на мой проект Sitecore. 6. Перешел к элементу, чтобы проверить, запущен ли он, он был. 7. Просмотрел журнал, и все прошло успешно на всем протяжении. — Никакой другой код, кроме имени и связанной команды, изменен не был. Не совсем уверен, было ли это «запущено» или нет, но это, казалось, исправило это.

3. Я забыл отметить важное изменение. Я чувствую себя глупо. Метод, который я вызывал, был защищенным, а не общедоступным (оставшимся от копирования и вставки старого метода Page_Load).

Ответ №2:

Похоже, ваша задача действительно запущена. В исключении ничего не упоминается о невозможности найти ваш метод, и исключение происходит из вашего метода tasks. Попробуйте установить точку останова внутри метода и проверить, какой объект равен null.

Просто для справки, параметрами, передаваемыми запланированной задаче, являются элементы, указанные в поле элементы команды, элемент определения команды и элемент определения расписания.

Комментарии:

1. Это то, о чем я подумал. Возможно, глупый вопрос, но я довольно новичок в .Net. Это скомпилированная DLL вне проекта, есть ли способ, которым я все еще могу установить точку останова и иметь возможность отлаживать? Думаю, я зациклился на этом, и мне не пришлось бы спрашивать, могу ли я это сделать.

2. Алистер, мне все еще интересно узнать, как я буду выполнять отладку . библиотеки DLL в моем проекте с Sitecore, если решите написать сообщение в блоге или отправить личное электронное письмо, я был бы безмерно благодарен. Спасибо за помощь.

3. Да, вы можете легко это отладить. Просто убедитесь, что вы выполняете отладочную сборку, чтобы получить файл .pdb в каталоге bin с вашей DLL. Это отладочные символы, необходимые отладчику. Затем в Visual Studio используйте «Прикрепить к процессу» и прикрепите к вашему ASP.NET рабочий процесс … это зависит от вашей версии IIS. Теперь установите свои контрольные точки и вуаля.

4. Извините, я не ответил Алексу. Я подумал, что SO отправит мне электронное письмо, если кто-нибудь прокомментирует мой ответ. В любом случае, Брайан описал выше процесс отладки в DLL, который не является частью вашего основного проекта. Главное — подключиться к процессу, а не запускать отладчик с помощью F5.

Ответ №3:

Что ж… в определении вашего метода указано «выполнить», маленькая буква r. Но в web.config, который вы запустили, используется big R. Sitecore .Чистое отражение здесь, чтобы найти метод, поэтому он будет чувствителен к регистру.

Мои запланированные задачи настроены в System / Tasks, а не в web.config. Работает как по волшебству.

Комментарии:

1. Да. Честно говоря, я также использую System / Tasks. Я считаю, что в моем коде есть что-то неправильное. Для моей задачи также был установлен метод ‘run’. Заглавная буква «R» была всего лишь агентом для DatabaseAgent, через который Sitecore запускает всю систему / задачи. Если вы можете ответить на вопрос в ответ на ответ Алистара, это могло бы помочь мне, если вы знаете, как это сделать. Спасибо!