【问题标题】:Proper way for one website to keep another alive in IIS?一个网站在 IIS 中保持另一个网站存活的正确方法?
【发布时间】:2013-02-20 08:23:33
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 为每个站点编写一个 1 方法 Web 服务,并从另一端使用它来检查后端所需的任何内容。
  • 请注意,这不是适合这项工作的工具。您应该有一个 Windows 服务/计划作业来进行维护或调用您网站上的页面并让它进行维护。请注意,如果作业是长期存在的,您需要处理超时和资源限制以防止它被杀死 - 这可能会对您网站的其他地方产生负面影响。

标签: asp.net iis web


【解决方案1】:

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

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

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

希望对您有所帮助。

【讨论】:

  • 感谢您的回答。我没有给辅助网站运行任务的能力。这就是为什么它必须依赖主站点才能做到这一点。这就是为什么当辅助站点处于活动状态时,主站点也必须处于活动状态。所以我不认为这真的是一个锁定问题。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多