【问题标题】:What service type should I use for a SOA solution to exec a long running task?SOA 解决方案应该使用哪种服务类型来执行长时间运行的任务?
【发布时间】:2012-02-22 07:16:45
【问题描述】:

我正在使用 VMWare Web 服务 API 在 .Net 中开发一个解决方案,以创建新的隔离虚拟化开发环境。

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

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

【问题讨论】:

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


    【解决方案1】:

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

    无论如何,如果你想以SOA的方式来做,WCF 将是你最好的朋友。

    但也许您可以混合使用由 Internet 信息服务和消息队列服务器 (MSMQ) 托管的 WCF 服务。

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

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

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

    【讨论】:

      【解决方案2】:

      我不理解您关于服务不安全的评论,我认为这是错误的。

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

      RabbitMQ:http://www.rabbitmq.com/
      大众运输:http://masstransit-project.com/
      NServiceBus:http://nservicebus.com/

      然后您基本上可以使用 WCF、控制台应用程序或服务之类的东西作为您的守护进程。

      【讨论】:

      • 我从未说过服务不安全。我说我们的产品环境是安全的,并且被锁定了。这会阻止我安装服务。
      • @TomPickles 你没有这么说,但总而言之,你说你公司的一些系统管理员不允许安装 Windows 服务,因为他/她认为这些不安全(如果这不是案例,为什么不能使用windows服务?)。无论如何,正如我在回答中所说,我认为 Windows 服务不是正确的解决方案。
      • @Matías Fidemraizer;对任何混淆表示歉意。这不仅仅是一个系统管理员的决定。我在一个庞大的外包账户上工作,安全性是由严格的政策定义的。另一方面,SOA 是通过混合使用某种消息队列来定义的吗?
      • @TomPickles 这就是为什么我讨厌为外包公司工作(以及许多其他原因)......回答你的问题,我会说“不一定”。
      猜你喜欢
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      相关资源
      最近更新 更多