2

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

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

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

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

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

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

4

2 回答 2

0

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

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

  • 维护一个锁(例如物理文件,数据库条目,...),并且只有在其他站点没有持有锁时才运行任务。
  • 使任务在站点 A 中可调用,然后让站点 B 调用它,而不是运行任务本身。然后站点 A 可以跟踪它是否已经在运行该任务。
  • 您自己列出的所有解决方案(尤其是将后台任务与网站完全分开)都是比上述更好的解决方案。

希望有帮助。

于 2013-03-05T19:24:52.007 回答
0

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

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

但是,如果这不是一个选项,那么您可能会从您所说的合并它们中受益。这样,只要子服务的应用程序池还活着,父服务就可用。同样,您可以让它们共享一个应用程序池。这里的问题如上所述,专用进程的完整性可能会受到损害。

.NET 并不是真正为运行专门的后台任务而设计的。这更适合支持 Web 服务的桌面应用程序。

于 2013-03-05T19:25:20.150 回答