长期运行的asp.net进程的服务类型

时间:2014-10-07 19:16:05

标签: asp.net wcf

我们的网站有一个长期运行的计算过程,让客户等待几分钟直到完成。我们已经决定我们需要进行设计更改,并将处理分配到Windows或WCF服务,而客户端会显示另一个页面,而我们正在进行所有计算。

虽然实施该服务的最佳方式是什么?

我们已经查看了后台工作进程,但看起来这些是有问题的,因为如果IIS可以定期关闭线程

使用最好的东西是Windows服务或WCF服务。有没有人对这个目的更好? 如果我们在另一台机器上托管服务,它是否必须是WCF服务? 看起来很难将服务(无论是什么类型)与网站进行通信 - 也许服务可以将其结果更新到数据库,然后网站会在之后对所需结果进行轮询。

这是一个我知道的开放式问题,但有没有人有任何想法?

感谢

2 个答案:

答案 0 :(得分:1)

我认为在性能方面的真正收益不会来自设计变更。

如果我要在Windows服务和WCF之间进行选择,我会使用Windows服务,因为我可以根据需要修复关联和优先级。但是,我必须同时实现为多个客户端提供服务的逻辑(在WCF服务方法中将由IIS处理)。

因此,就性能而言,如果对WCF服务和Windows服务使用.NET框架,性能差异将不会很大。 Windows服务将更加“可控”,WCF将更加直接,并且没有大的性能损失。

对于这些类型的任务,我将专注于高度优化单线程计算。如果你有一个复杂的计算,它可以用本机代码(C或C ++)编写吗?您可以创建一个高度优化的.DLL文件,并由Windows服务或WCF服务使用。使用此方法将允许您选择最佳编译器选项并充分利用您的计算机资源。也没有什么能阻止你在.DLL函数中创建多个线程。

在两种情况下都可以确保网站和服务之间的链接:通过Windows服务套接字(用于创建协议的额外代码)或直接通过SOAP用于WCF。如果您将结果推送到数据库中,那么难以让网站(并且知道特定的用户会话)知道数据在那里。

这就是我要做的事。

希望它有所帮助。

干杯!

答案 1 :(得分:1)

一种方法是:

  • 客户端使用对WCF服务的调用(可以在IIS中托管)
  • 提交计算请求
  • 计算请求存储在具有唯一ID
  • 的数据库中
  • 该ID将返回给客户
  • Windows服务(或几台不同计算机上的多个服务器)轮询数据库以获取新请求
  • Windows服务执行计算并将结果存储到具有ID
  • 的结果表中
  • 客户端使用ID
  • 轮询结果表(使用WCF服务)
  • 计算完成后,结果将返回给客户
相关问题