我应该使用哪种服务类型来使SOA解决方案执行长时间运行的任务?

时间:2012-01-30 13:46:17

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

我正在开发.Net中的解决方案,利用VMWare Web Service API创建新的独立虚拟化开发环境。

前端将基于网络。请求者输入将持久保存到SQL的特定环境的详细信息。因此,我需要编写某种类型的引擎来从SQL中提取数据并处理长期运行的任务,即创建资源池,切换端口组和克隆现有的VM模板等。随着工作的进展,将引发事件以写入日志和将信息更新回SQL。这允许请求者将数据拉回到网页中以查看其进展情况或是否已完成。

我正在努力解决的问题是如何设计引擎来执行创建环境的长期任务。我不能写一个Windows服务(我想要),因为我们在一个非常安全的环境中工作,这是不可能的(组策略等)。我可以编写一个Web服务来执行任务,扩展 httpRuntime executionTimeout 以允许任务完成。但我很想知道你们认为可能是一个更好的解决方案(基于.Net 3.5)。解决方案需要面向服务,因为我们可能会在我们组织内的其他项目中使用它。 WWF,WCF怎么样?我没有使用过.Net 2.0以来的任何新技术,因为我们刚刚被批准从.Net 2.0升级。

2 个答案:

答案 0 :(得分:2)

首先,Windows服务不是不安全。软件开发之一就是无知或因缺乏调查,需求分析和协作决策而放弃解决方案。

无论如何,如果你想以 SOA 的方式做到这一点,WCF将成为你最好的朋友。

但也许您可以混合使用Internet Information Services和Message Queue Server(MSMQ)托管的WCF服务。

客户端调用WCF服务操作并将消息排入某个Message Queue Server队列。 稍后,一个超时执行的Windows计划任务,检查您的队列是否至少有一个传入消息,并且任务处理此消息和其他消息,直到您将所有消息出列。

这样,IIS WCF主机永远不需要增加执行时间,它将提供更多请求,而执行这些长任务的繁重工作则由Windows计划任务执行,例如控制台应用程序 PowerShell cmdlet(或者只是PowerShell脚本,为什么不呢?)。

查看关于MSMQ的这篇旧的但有用的MSDN文章:http://msdn.microsoft.com/en-us/library/ms978430.aspx

答案 1 :(得分:0)

我不明白你对服务不安全的评论,我认为这是错误的。

但是我会考虑创建一些使用消息传递总线/守护进程的东西。

RabbitMQ:http://www.rabbitmq.com/
MassTransit:http://masstransit-project.com/
NServiceBus:http://nservicebus.com/

然后你基本上可以使用像WCF,Console App或Service这样的守护进程。