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

时间:2012-12-28 21:28:25

标签: c# iis asmx

我有一些传统的ASMX IIS托管服务。客户端应用程序订阅或取消订阅Web服务。通过Web服务逻辑的一些内部,它需要定期向订阅的应用程序发送消息。

执行长时间运行任务的最佳方法是什么?我理解用长期运行的任务打开Thread在IIS下不是一个好主意。

2 个答案:

答案 0 :(得分:3)

ASMX服务不能满足您的要求:他们不能只决定向客户发送消息。他们所能做的只是在客户要求时做出回应。

你可以破解并提出一种方法来启动长时间运行的任务,以及另一种方法来轮询任务的状态。这可行,但它可能很昂贵。

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

答案 1 :(得分:1)

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