Asp.Net - 将处理卸载到外部应用程序

时间:2013-01-09 19:57:10

标签: c# asp.net polling

我有一个asp.net网站,使用第三方exe处理请求。目前我的工作流程是

  1. 用户使用任何浏览器访问网站并填写包含作业详细信息的表单

  2. 网站调用正在侦听端口的WCF自托管Windows服务

  3. Windows服务启动第三方exe来处理作业并将结果返回给网站

  4. 网站将返回的结果显示给用户

  5. 上述网站是一个原型,现在需要转变为生产就绪部署。我意识到上述架构有许多可能会破坏的点。例如,如果机器电源关闭或者Windows服务崩溃并且不再监听端口,则所有当前请求都将停止处理。为了使架构更健壮,我正在考虑以下

    1. 用户使用任何浏览器访问网站并填写包含作业详细信息的表单

    2. 网站将作业详细信息写入数据库

    3. Windows服务每隔10秒轮询数据库以获取新作业,然后使用第三方应用程序执行该作业并执行该作业。结果将写回数据库。

    4. 网站现已开始轮询数据库,获取结果并将其显示给用户。

    5. 第二种架构为我提供了更多的日志记录功能,如果它们在队列中,则可以再次启动作业。然而,它涉及大量的轮询,可能无法扩展。任何人都可以推荐更好的架构吗?

2 个答案:

答案 0 :(得分:0)

我在我的一个应用程序中实现了相同的架构,用户正在处理多个请求。所以我有 -

  1. 用户转到网站并选择参数等。提交请求
  2. 请求存储在数据库表中,包含所有详细信息+用户名等
  3. 服务查看数据库表并以FIFO方式接收请求
  4. 处理完请求后,状态将更新为“失败”或“已完成”到针对该requestId的数据库表,网站上的用户可以看到该
  5. 如果有请求,服务会选择下一个请求,否则停止。
  6. 服务每30分钟运行一次

答案 1 :(得分:0)

我会使用MSMQ或RabbitMQ。而不是轮询。

通过这种方式,您可以将处理卸载到队列中的多个使用者(可能是Web服务器的不同服务器),并并行处理更多请求。