【问题标题】:Background process on webserver with an ASMX Webservice具有 ASMX Web 服务的 Web 服务器上的后台进程
【发布时间】:2011-11-28 20:17:11
【问题描述】:

我遇到了一个问题,我需要通过 asmx 网络服务接收用户请求,并且对于每个请求我需要:

1) 向用户发回请求的 ID。类似于:“您的请求已收到,ID 为 ####”。 (id由DB生成,自增列。)

2) 在不阻塞用户响应的情况下启动后台进程,我的意思是 web 服务发回 Id 并在后台启动进程。

我知道也许我应该使用 WCF,但我认为服务器无法运行它,但如果你能在这两种服务中告诉我这个问题的答案,那就更好了。

我不知道要执行此任务。感谢您的帮助。

【问题讨论】:

  • 也许可以看看 Quartz.NET 之类的东西? quartznet.sourceforge.net
  • 如果服务器运行.NET 3.0或更高版本,则可以运行WCF。
  • 我需要做的流程并不复杂,只是去请求有关用户的财务信息,但我需要bg流程,因为金融服务无法立即响应。我正在将我必须做的“进程”记录到数据库中,如果在 application_start (Global.asax) 中只需启动一个带有 thread.sleep 的后台工作程序以进行计时,查找要处理到数据库中的记录,以及每个“进程”发现启动另一个后台工作者?

标签: c# asp.net .net web-services asmx


【解决方案1】:

我通常借助定期启动控制台应用程序的计划任务来执行此操作。

ASMX Web 服务和计划的控制台应用程序之间的通信是通过我填写工作项队列表的数据库完成的。

有了这个(也许不是那个优雅的方法)我得到了以下好处:

  • 完全绕过 ASP.NET 中的后台线程(老实说,我并不完全理解)
  • 即使在重新启动 ASP.NET 应用程序时,后台处理也能正常工作。

根据要求,计划任务可以根据需要经常运行,例如每 5 分钟一次或每天一次。

【讨论】:

  • 您好,感谢您的回复。我不能使用控制台应用程序,因为网络服务器是一个虚拟主机,它们不允许我安装应用程序,我可以将其放入 IIS。我需要做的流程并不复杂,只是去请求有关用户的财务信息,但我需要 bg 流程,因为金融服务无法立即响应。
【解决方案2】:

您可以使用 MSMQ。创建一个队列来处理传入的请求和一个服务来从队列中获取任务并处理它们。如果不了解您的具体情况,很难提出“正确”的解决方案。

【讨论】:

  • 您好,感谢您的回复。 MSMQ 是否在典型的 Web 托管中启用?我需要做的流程并不复杂,只是去请求有关用户的财务信息,但我需要 bg 流程,因为金融服务无法立即响应。
  • 是的,公司只是购买虚拟主机服务。
【解决方案3】:

我将只运行一个后台任务(可能在您的 global.asax 中),该任务从记录的请求队列中运行,提取它们并实际执行它们。

然后,您的 .asmx 方法将只是添加到此队列(包括 ID),因此可以在后台处理任务时立即返回给用户...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多