我有一个MyMainApplication类,它是一个SPIisWebServiceApplication。所以它在IIS下托管并运行。
我有一个自定义的sharepoint计时器作业,可以说是名为CustomTimerJob的类,它派生自SPJobDefinition类。因此,计时器作业在OWSTimer.exe下运行
我有两个问题:[请参阅下面的代码,以便将问题联系起来]
我的CutomTimerJob中的变量是可以从calle访问的,在我的例子中是var job = new CustomTimerJob(); job.RunNow(); ,varibale作业是否会引用customeTimerJob运行,并且能够获得job.status的值?我已经看到,人们使用[persisted]关键字标记变量,以保持状态。如果有人能详细说明,我将不胜感激。为什么使用它以及它实际如何工作,它在哪里持续存在?
异常可以浮回到被调用方吗? 据我所知,由于计时器作业在单独的进程上运行,因此异常不会浮动回被调用者是合乎逻辑的。但是,问题是,当它执行此var job = new CustomTimerJob();时,指向的作业变量是什么?
我写的代码看起来像这样:
> 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);
>
> }
>
> }
我真的很感激那些有心直读到这一行的读者。来自我的荣誉!
先谢谢。
答案 0 :(得分:3)
仅SPJobDefinition.RunNow()
方法计划执行,然后在OWSTimer.exe
进程的上下文中执行。因此,您的问题的答案是:
RunNow()
的地方。通常,允许在自定义计时器作业之外传播未处理的异常是一种不好的做法,因为该作业被认为是失败的。除非你需要正确处理异常。