【问题标题】:Can scheduled web request be authorized by MVC controllers?MVC 控制器可以授权预定的 Web 请求吗?
【发布时间】:2012-12-28 16:38:02
【问题描述】:

我的网络应用必须在后台进行一些计算。我研究了多种解决方案,我想使用业务逻辑而不是触发所有计算的 SQL 作业。经过几天的研究,我仍然不确定什么是我的案例的最佳解决方案。

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

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

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

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

  • 希望共享 Web 主机服务支持 Windows 任务(但这可以使用授权凭据调用吗?

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

提前致谢

【问题讨论】:

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


    【解决方案1】:

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

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

    您始终可以在没有 Windows 服务的情况下运行,然后您只需承担应用程序池在不使用时关闭的风险。解决这个问题的一种方法是拥有一个外部 ping 程序,以确保有调用,正如您所指出的那样并不理想。在数据库中拥有作业和触发器可以防止丢失信息,但不会防止失火。

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

    一些共享提供程序对运行代码有非常严格的设置。如果沙盒太紧,Quartz.NET 可能根本无法运行。

    【讨论】:

      猜你喜欢
      • 2015-09-10
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2016-09-04
      • 2011-07-24
      相关资源
      最近更新 更多