【发布时间】:2010-03-09 21:38:26
【问题描述】:
我正在使用quartz.net 在asp.net mvc 应用程序中安排常规事件。
计划的作业应调用需要 UrlHelper 实例的服务层脚本(用于根据将由服务发送的电子邮件中包含的正确路由 (via urlHelper.Action(..)) 创建 Url)。
我不想将链接硬编码到电子邮件中 - 应该使用 urlhelper 解决它们。
工作:
public class EvaluateRequestsJob : Quartz.IJob
{
public void Execute(JobExecutionContext context)
{
// where to get a usable urlHelper instance?
ServiceFactory.GetRequestService(urlHelper).RunEvaluation();
}
}
请注意,这不是在 MVC 管道中运行的。当前没有请求被处理,代码由 Quartz 调度程序在定义的时间运行。
如何获得在指定位置可用的 UrlHelper 实例?
如果无法构造 UrlHelper,我看到的另一个选项是通过执行 HTTP 请求使作业“自调用”控制器操作 - 在执行操作时,我当然会有一个 UrlHelper 实例可用- 但这对我来说似乎有点 hacky。
【问题讨论】:
-
哇,反对票在这个线程上飞走了:)
-
@Kelsey 也许是因为这个问题似乎太琐碎,所以人们倾向于给出琐碎或不相关的答案,或者这个问题至少需要不太知名的框架(石英)的基本知识
-
这个石英调度器是否使用类似于 Jeff 在 blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet 上发帖的方法?
-
到目前为止,大多数答案的问题是他们假设石英任务将在用户请求中运行,但它不会,诸如 HttpContext.Current 之类的将无法正常工作。该问题类似于缓存过期事件(也不会作为用户请求的一部分运行)。
标签: asp.net-mvc quartz-scheduler quartz.net