如何从Sharepoint Timer作业中浮动异常?

时间:2011-04-15 21:53:23

标签: sharepoint-2010

我有一个MyMainApplication类,它是一个SPIisWebServiceApplication。所以它在IIS下托管并运行。

我有一个自定义的sharepoint计时器作业,可以说是名为CustomTimerJob的类,它派生自SPJobDefinition类。因此,计时器作业在OWSTimer.exe下运行

我有两个问题:[请参阅下面的代码,以便将问题联系起来]

  1. 我的CutomTimerJob中的变量是可以从calle访问的,在我的例子中是var job = new CustomTimerJob(); job.RunNow(); ,varibale作业是否会引用customeTimerJob运行,并且能够获得job.status的值?我已经看到,人们使用[persisted]关键字标记变量,以保持状态。如果有人能详细说明,我将不胜感激。为什么使用它以及它实际如何工作,它在哪里持续存在?

  2. 异常可以浮回到被调用方吗? 据我所知,由于计时器作业在单独的进程上运行,因此异常不会浮动回被调用者是合乎逻辑的。但是,问题是,当它执行此var job = new CustomTimerJob();时,指向的作业变量是什么?

  3. 我写的代码看起来像这样:

    >     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 个答案:

答案 0 :(得分:3)

SPJobDefinition.RunNow()方法计划执行,然后在OWSTimer.exe进程的上下文中执行。因此,您的问题的答案是:

  1. 不,他们无法访问。更确切地说,您创建的实例与将要执行的实例不同,它甚至存在于另一个进程中。
  2. 不,出于同样的原因,异常不会传播到您致电RunNow()的地方。通常,允许在自定义计时器作业之外传播未处理的异常是一种不好的做法,因为该作业被认为是失败的。除非你需要正确处理异常。