0

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

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

4

2 回答 2

3

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

您可以四处寻找一种方法来启动长时间运行的任务,以及另一种方法来轮询任务的状态。这行得通,但它可能很昂贵。

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

于 2012-12-28T21:44:58.143 回答
1

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

于 2012-12-28T21:47:42.787 回答