一个网站在IIS中保持另一个活着的正确方法?

时间:2013-03-05 19:13:32

标签: asp.net iis web

基本上我有一个网站,它会运行一个后台任务来执行一些“维护”任务,而它不是空闲的。当它处于空闲状态时,这些进程不需要运行。

现在我有一个辅助网站(主站点下的虚拟目录),也需要执行这些任务。但是,它们不能同时运行它们,否则会导致问题。

现在更正确的解决方案可能是合并站点,将任务分解到不同的应用程序,或者更改任务,以便它们在同时运行时不会相互冲突。出于这样或那样的原因,这些不是(当前)选项。

所以基本上当辅助网站处于活动状态时,确保主网站清醒并运行这些任务的最佳方法是什么?

我认为最简单的解决方案是在辅助网站中包含对主网站的引用,以便辅助网站上的任何页面加载都会强制第一个网站成为服务器请求。像1px图像的东西。

但是通过IIS可以更好地解决这个问题吗?他们应该共享相同的应用程序池吗?这两个应用程序都相对稳定,所以我不太担心一个网站会导致另一个网站崩溃。

2 个答案:

答案 0 :(得分:0)

你的问题有点困惑。有一次你说两个站点不能同时运行任务,但是你说当辅助站点处于活动状态时,主站点也应该是活动的吗?

假设您的目标是让任务一次只在一个地方运行,那么您基本上遇到了锁定问题。一些解决方案是:

  • 保持锁定(例如物理文件,数据库条目......),并且只有在其他站点未持有锁定时才运行该任务。
  • 使任务在站点A中可调用,然后让站点B调用它而不是自己运行任务。然后,站点A可以跟踪它是否已在运行任务。
  • 您自己列出的所有解决方案(特别是将背景任务与网站完全分开),这些解决方案比上述解决方案更好。

希望有所帮助。

答案 1 :(得分:0)

很难依赖在Web服务上运行自动化任务。如果应用程序池被回收,那么该任务将丢失,并且该过程可能会失去其完整性。在收集应用程序池时,无法保证进程会很好地降级。

运行专用任务最好由设置为专用的系统处理。即,托管此Web服务的服务器。我认为您最好将本地服务直接在服务器上运行,而不是作为Web服务暴露给Web。

但是,如果这不是一个选项,那么你可能会因为你所说的那样合并它们而受益。这样,只要应用程序池在子服务中处于活动状态,父服务就可用。同样,您可以让他们共享一个应用程序池。这里的问题如上所述,专用流程的完整性可能会受到损害。

.NET并非真正用于运行专用后台任务。这更适合支持Web服务的桌面应用程序。