C# Sitecore调度参数

C# Sitecore调度参数,c#,sitecore,job-scheduling,C#,Sitecore,Job Scheduling,问题 我目前正在尝试使用计划和命令在数据库中设置Sitecore计划任务 到目前为止,我已经完成了我所需要的大部分工作。他们的方法使用:public void WriteToLogFile(Item[]itemArray、CommandItem CommandItem、ScheduleItem ScheduleItem)。我假设是在调度项、命令项本身和调度项本身中传递的项 我有一个run函数,它遵循相同的语法:protectedvoidrun(Item[]itemArray,CommandIte

问题

我目前正在尝试使用计划和命令在数据库中设置Sitecore计划任务

到目前为止,我已经完成了我所需要的大部分工作。他们的方法使用:
public void WriteToLogFile(Item[]itemArray、CommandItem CommandItem、ScheduleItem ScheduleItem)
。我假设是在调度项、命令项本身和调度项本身中传递的项

我有一个run函数,它遵循相同的语法:
protectedvoidrun(Item[]itemArray,CommandItem CommandItem,scheduleim scheduleditem)
。我收到了一个异常,因为它在我的日志中运行。链接的是异常堆栈:,但下面是嵌套的异常:

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)
我尝试了几种不同的参数组合,但没有成功

调度web.config节:

 <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>
 ...

00:01:00
核心
/sitecore/系统/任务/时间表
真的
...

有人知道sitecore通过启动作业的方法调用的方法发送的参数吗?

根据您在SDN上链接到的代码片段,我认为您创建了自己的方法,类似于
WriteLogFile
,但不是
Run()
。第四步说:

填写必要的字段:

类型:CustomScheduleTasks.Task1,CustomScheduleTasks

方法:写入日志文件

类型指示命名空间和程序集文件。该方法指示要调用指定类的方法

您的命令现在可以用作计划任务


因此,与其使用
Run()
方法,不如将其命名为其他名称,并在Sitecore中命令的
method
字段中进行设置
Run()
是Sitecore的DatabaseAgent中运行的方法。

嗯。。。你的方法定义是“运行”,小r。但是在您已经运行的web.config中,big R.Sitecore在这里使用.Net反射来查找方法,因此它将区分大小写


我在System/tasks而不是web.config中设置了计划任务。工作起来很有魅力。

看起来您的任务实际上正在运行。异常没有提到任何关于找不到方法的内容,异常来自tasks方法。尝试在方法内设置断点并检查哪个对象为null


仅供参考,传递给计划任务的参数是命令项字段、命令定义项和计划定义项中指定的项。

我就是这么想的。也许是个愚蠢的问题,但我对.Net还是比较陌生的。这是一个在项目外部编译的DLL,有没有办法设置断点并进行调试?我想我已经挂在这上面了,不必问我是否可以这样做。Alistair,我仍然对如何进行调试感兴趣。在我与Sitecore的项目中,DLL如果决定写一篇博客文章或发送一封个人电子邮件,我将不胜感激。谢谢你的帮助。是的,你可以很容易地调试这个。只需确保您正在进行调试构建,以便使用DLL获取bin目录中的.pdb文件。这些是调试器需要的调试符号。然后在Visual Studio中使用“附加到进程”并附加到ASP.NET工作进程。。。这取决于您的IIS版本。现在设置断点,瞧。对不起,我没有回复Alex。我想如果有人对我的回复发表评论,我也会发电子邮件给我。不管怎样,Bryan描述了上面调试到DLL的过程,DLL不是主项目的一部分。关键是附加到进程,而不是用F5.Aye启动调试器。老实说,我正在使用系统/任务。我相信我的代码中有错误的地方。我的任务也被设置为“运行”方法。大写字母“R”只是Sitecore运行所有系统/任务的DatabaseAgent的代理。如果你能回答阿利斯塔的回答,如果你知道怎么做,可能会对我有所帮助。谢谢我把它改成了别的,只是为了不成为一个可能的保留字。我们看看会怎么样。老实说,我想这可能解决了问题?1.我将名为pull 2的方法更改为pull 2。我在相关命令中更改了它。3.有一个问题,因为我相信VS没有构建调试版本。4.用正确的版本替换文件。5.转到尝试设置断点调试并添加对我的Sitecore项目的引用。6.转到项目以检查它是否运行,它是否已运行。7.看着日志,它一路成功。-除名称和相关命令外,未更改其他代码。我不确定它是否是“运行”,但这似乎解决了它。我忘了记下一个重要的变化。我觉得自己很愚蠢。我调用的方法是受保护的,而不是public(从一个旧的Page_Load方法的复制和粘贴中遗留下来的)。