Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.Net-将处理卸载到外部应用程序_C#_Asp.net_Polling - Fatal编程技术网

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

C# Asp.Net-将处理卸载到外部应用程序,c#,asp.net,polling,C#,Asp.net,Polling,我有一个asp.net网站,它使用第三方exe处理请求。目前我的工作流程是 用户使用任何浏览器访问网站,并填写包含工作详细信息的表单 该网站调用WCF自托管windows服务,该服务正在侦听端口 Windows服务启动第三方exe来处理作业,并将结果返回到网站 网站向用户显示返回的结果 上述网站是一个原型,现在需要转变为生产准备部署。我意识到上面的体系结构有许多可能被破坏的地方。例如,如果计算机已关机,或者windows服务崩溃,并且不再侦听端口,则所有当前请求都将停止处理。为了使体系结构更加健

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

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

  • 该网站调用WCF自托管windows服务,该服务正在侦听端口

  • Windows服务启动第三方exe来处理作业,并将结果返回到网站

  • 网站向用户显示返回的结果

  • 上述网站是一个原型,现在需要转变为生产准备部署。我意识到上面的体系结构有许多可能被破坏的地方。例如,如果计算机已关机,或者windows服务崩溃,并且不再侦听端口,则所有当前请求都将停止处理。为了使体系结构更加健壮,我考虑以下几点

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

  • 网站将工作详细信息写入数据库

  • Windows服务每10秒轮询一次数据库以获取一个新作业,它将拾取该作业并使用第三方应用程序执行该作业。结果将写回数据库

  • 该网站现在已经开始轮询数据库,获取结果并将其显示给用户


  • 第二种体系结构为我提供了更多的日志功能,如果作业在队列中,它们可以再次启动。但是,它涉及大量轮询,可能无法扩展。有谁能推荐更好的体系结构吗?

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

  • 用户转到网站并选择参数等。提交请求
  • 请求与所有详细信息+用户名等一起存储到数据库表中
  • 服务查找数据库表并以FIFO方式拾取请求
  • 处理请求后,状态将更新为“失败”或“已完成”,并根据该请求ID更新到数据库表中,用户可以在网站上看到该请求ID
  • 若有下一个请求,服务将拾取该请求,否则将停止
  • 服务每30分钟运行一次

  • 我会选择MSMQ或MSMQ,而不是轮询


    这样,您可以将处理过程卸载到队列的多个使用者(可能是web服务器上的独立服务器),并并行处理更多请求。

    我们已经为类似的需求进行了POC,我们在步骤2考虑了MSMQ,但没有在项目中实施。期待关于这个有趣的实现的答案。@Sundeep-您最终在项目中使用了MSMQ的什么替代方案?项目是否已完成或仍在进行中?ThanksIt是很久以前的事了,应用程序做一些后端处理并向用户发送通知电子邮件。因此,您希望将其替换为即时处理。如果您真的希望它具有健壮性,那么您应该直接使用MSMQ,或者使用依赖MSMQ的WCF绑定之一。不要重新发明轮子,特别是如果它很重要的话;我已经使用了MQSeries(但MSMQ是相同的原理)和“保存到db”…这两个选项都是有效的-但是:由于您已经拥有并了解WCF,请查看允许您使用WCF写入MSMQ(并从中读取)的“netmsmqbinding”。如果我有幸每30分钟收到一次请求,我会选择这种方法。但是,对于我当前的应用程序,响应需要实时,并且可能会产生大量请求(每小时200多个请求)。这似乎是目前最好的选择。其他人也建议MSMQ,但我只能接受一个答案。我会接受这个答案,因为它有很好的理由选择这种方法而不是投票。