在IIS上托管的asmx服务下长时间运行的任务

本文关键字:长时间 运行 任务 服务 asmx IIS | 更新日期: 2023-09-27 17:49:57

我有一些遗留的ASMX IIS托管服务。客户端应用程序对web服务进行订阅或退订。通过一些内部的web服务逻辑,它需要定期向订阅的应用程序发送消息。

完成长时间运行任务的最好方法是什么?我明白在IIS下打开线程与长时间运行的任务不是一个好主意。

在IIS上托管的asmx服务下长时间运行的任务

ASMX服务不能做您要求的事情:它们不能只是决定向客户端发送消息。他们所能做的就是在客户端请求时做出响应。

您可以变通,想出一种方法来启动长时间运行的任务,另一种方法来轮询任务的状态。这是有效的,但是可能会很昂贵。

更好的模型是在单独的Windows服务中执行长时间运行的任务。让该服务托管一个简单的WCF服务,该服务仅由主服务(与客户端通信的服务)使用。主(WCF)服务将使用双工通道与客户机通信。这样,只要有关于某个长期运行任务的消息,它就可以"调用"客户机。

通常在这种情况下,当您没有办法将结果推回时,为长时间运行的任务创建一个唯一ID并将其发送回客户端,然后运行任务并在数据库中创建一个表或其他存储任务状态的地方。客户端将定期提取服务,以根据给定的ID查看任务的状态。一旦发现任务完成,它将检索结果。在IIS中运行一个线程来完成它的工作是完全可以的。