可以通过MVC控制器授权预定的Web请求吗?

时间:2012-12-27 13:08:29

标签: model-view-controller web request quartz.net

我的网络应用程序必须在后台进行一些计算。我已经调查了多个解决方案,我想寻找业务逻辑而不是触发所有计算的SQL工作。经过几天的研究,我仍然不相信什么是我的案例的最佳解决方案。

很多文章都提到Quartz.NET,一个单独的Windows服务(但我认为这不是大多数共享Web主机服务的选项),Windows任务等......

为了保持业务逻辑中的计算,我将使用专用的“任务”控制器扩展我的Web应用程序,该控制器自动触发计算,然后返回其操作的结果。

Q1:使用Quartz.NET定时Web请求调用控制器不会那么难,但是如何保护它?如果我将[Authorize]属性添加到我的'task'控制器它会阻止请求。 (请注意,我在我的互联网网络应用程序上使用表单身份验证)我不希望互联网上的用户能够启动我的“任务”控制器。

Q2:另外,如果我认为共享网络托管服务不支持安装单独的Windows服务或远程桌面连接是正确的,我将有2个选项:

  • 希望共享网络托管服务支持Windows任务(但可以使用授权凭据调用吗?

  • 从我的application_start启动Quartz.NET(这当然不是一个理想的解决方案......)

提前致谢

1 个答案:

答案 0 :(得分:0)

首先,我不会从预定作业调用ASP.NET MVC控制器。我只是委托业务组件/服务(无论名称是什么),并确保我们使用上下文的权限运行正确的东西。这可能意味着我使用有关计算完成对象的信息来解雇作业,并将该信息传递给服务组件(计算用户X的每日平均值)。我没有看到使用ASP.NET MVC堆栈伪装调用的真正好处。

所以Q1:安全的代码级别,而不是使用ASP.NET MVC堆栈

您可以随时在没有Windows服务的情况下运行,然后只需在不使用时关闭应用程序池的风险。获得此功能的一种方法是使用外部ping程序,确保进行调用,并不像您指出的那样理想。在数据库中拥有作业和触发器可以防止丢失信息,但不会导致失火。

Q2:最有可能运行Quartz.NET比尝试访问Windows计划任务要容易得多。

某些共享提供程序对要运行的代码具有非常严格的设置。如果沙盒太紧,那么Quartz.NET可能根本就不会运行。