Как создавать исключения из заданий Sharepoint Timer? - PullRequest
1 голос
/ 16 апреля 2011

У меня есть класс MyMainApplication, который является SPIisWebServiceApplication.Так что он размещен и работает под управлением IIS.

У меня есть специальное задание таймера sharepoint, скажем, с именем класса CustomTimerJob, который является производным от класса SPJobDefinition.Итак, задания таймера выполняются под OWSTimer.exe

У меня есть два вопроса: [Пожалуйста, посмотрите код ниже, чтобы связать вопросы]

  1. Переменные в моем CutomTimerJob, они доступны из вызова, в моем примере это будет var job = new CustomTimerJob ();job.RunNow ();, будет ли задание varibale иметь ссылку на запущенный customeTimerJob и сможет ли получить значение job.status?Я видел, что люди использовали ключевое слово [persisted] для обозначения переменных, чтобы сохранить состояние.Буду признателен, если кто-нибудь сможет подробнее рассказать об этом.Почему это используется и как оно на самом деле работает, где оно сохраняется?

  2. Может ли исключение переместиться обратно к вызываемому объекту?Насколько я понимаю, логично, что исключение не будет возвращено вызываемому объекту, поскольку задание таймера выполняется в отдельном процессе.Но тогда вопрос в том, что, когда он делает это var job = new CustomTimerJob (); на что указывает переменная job?

Код, который я написал, выглядит примерно так:

>     Class MyMainApplication : SPIiWebServiceApplication
>     {
>     // something
>     .
>     .
>     .
>     void some_function()
>     {
>     // Create and run the timer job immediately
>     
>     var job = new CustomTimerJob()
>     job.RunNow();
>     
>     // Give it a bit of time before checking the status
>     Thread.Sleep(5000);
>     
>     // Want to print the status to see if it was changed when it ran 
>     Console.Writeln( job.Status );
>     
>     }
>     
>     }
>     
>     ----------------------
>     
>     class CustomTimerJob : SPJobDefinition
>     {
>     
>     public Boolean status;
>     // something
>     
>     public override void Execute(Guid contentDbId)
>     {
>     status = true;
>     try {
>     // do some processing
>     } catch (Exception) {
>     
>     // Can I throw the exception up from here ? And will the calle get the exception
>     // throw new CustomException(e);
>     
>     }
>     
>     }

Я действительно ценю читателей, у которых было сердце, чтобы прочитать все до этой строки.Слава от меня!

Заранее спасибо.

1 Ответ

3 голосов
/ 16 апреля 2011

Метод SPJobDefinition.RunNow() только планирует выполнение, которое затем выполняется в контексте процесса OWSTimer.exe. Следовательно, ответы на ваши вопросы:

  1. Нет, они недоступны. Точнее, созданный вами экземпляр - это не тот экземпляр, который будет выполняться, и он даже живет в другом процессе.
  2. Нет, по той же причине исключение не будет распространено на то место, где вы звоните RunNow(). Обычно плохая практика разрешать распространение необработанного исключения за пределы пользовательского задания таймера, поскольку задание считается неудачным. Если это не то, что вам нужно для правильной обработки исключений.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...