我有一些传统的ASMX IIS托管服务。客户端应用程序订阅或取消订阅Web服务。通过Web服务逻辑的一些内部,它需要定期向订阅的应用程序发送消息。
执行长时间运行任务的最佳方法是什么?我理解用长期运行的任务打开Thread在IIS下不是一个好主意。
答案 0 :(得分:3)
ASMX服务不能满足您的要求:他们不能只决定向客户发送消息。他们所能做的只是在客户要求时做出回应。
你可以破解并提出一种方法来启动长时间运行的任务,以及另一种方法来轮询任务的状态。这可行,但它可能很昂贵。
更好的模型是在单独的Windows服务中执行长时间运行的任务。让该服务托管一个简单的WCF服务,该服务仅由主服务(与客户端通信的服务)使用。主(WCF)服务将使用双工通道与客户端通信。这样,只要有关于其中一个长期任务的消息,它就可以“呼叫”客户端。
答案 1 :(得分:1)
通常在这种情况下,如果没有办法推回结果,请为长时间运行的任务创建一个唯一的ID并将其发送回客户端,之后运行任务并在数据库中有一个表或存储任务状态的其他内容。客户端将定期提取服务,以按给定ID查看任务的状态。一旦发现任务完成,它将检索结果。 在IIS内部运行一个线程完成它的工作是完全没问题的。