3

我正在处理一个必须导入具有 1000 条记录的文件的业务问题。每条记录都必须在工作流中注册为单独的记录,该记录必须经过自己的工作流。

WF4 Corporate Purchase Process示例有一个很好的解决方案,因为在第一步中它为所有必需的记录 ID 创建书签。因此,可以使用每个单独的记录/ID 的其余操作来恢复工作流。

  1. 我想知道如何使用工作流服务来实现相同的东西,因为我可以获得 AppFabric 对我的工作流的好处。
  2. 是否有任何其他解决方案来处理批量记录/ID?否则,工作流服务必须被调用 1000 次才能注册工作流实例中的每条记录,这不是一个好的解决方案。
4

3 回答 3

1

我想知道如何使用工作流服务来实现相同的东西,因为我可以获得 AppFabric 对我的工作流的好处。

这很简单。您将拥有一个读取文件并使用存在的循环活动循环结果的工作流。然后,在循环内,您将通过使用活动调用端点来启动每个记录所需的工作流(“服务”)Send

现在,对于作为服务的工作流,您将Receive在工作流顶部有一个活动,该活动也CanCreateInstance设置了true. 之后的一切都Receive与任何其他工作流程没有什么不同。您可以考虑在此Send之后立即进行活动,Receive以让调用者知道该服务已启动。但这不是要求 -Receive将是必需的,因为它强制 WF 构建工作流以使用WorkflowServiceHost.

是否有任何其他解决方案来处理批量记录/ID?否则,工作流服务必须被调用 1000 次才能注册工作流实例中的每条记录,这不是一个好的解决方案。

您是否表示 Web 服务器接收 1000 个请求不是一个好的解决方案?考虑一个 IIS 服务器可以处理大约 25-50 个请求的事实,每个时间点,每个核心现在考虑这样一个事实,即您正在加载工作流的循环在那个时刻的平均值不会超过5,但可能更像是 1 或 2。

我认为 Web 服务器不会成为您的问题。我已经通过一个循环在服务器上启动了 10,000 个工作流,就像您要构建的那样,它并没有出汗。

于 2012-09-24T12:04:36.960 回答
0

本着做最简单的事情的精神,您可以将子工作流作为一个活动引入主工作流,并为每个子工作流使用并行来为文件中的每个输入执行分支。不需要额外的调用,并且工具支持这一点,因为所有工作流都是活动。将主进程托管在服务中,这样您就可以避免与其他 IIS 用户(他们可能是真实的人)发生争用,这可能是一个好主意。

我同意调用 IIS 或 WCF 服务 1000 次不是问题,除非你想在几秒钟内完成!

重要的是要记住,工作流的好处之一是它的开销相当低(与其他工作流产品相比),因此您应该更关心工作流的作用,而不仅仅是启动大量实例的想法。像您的示例这样的批处理的想法非常普遍。

于 2012-09-26T12:07:32.557 回答
0

一种方法是使用 WCF 的 MSMQ 绑定来启动您的工作流。请求可以通过 HTTP 正常进入,WCF 会将它们路由到 MSMQ 并处理负载。您可以通过 MSMQ 绑定 + IIS 设置限制使用多少工作流实例。

下载描述使用 WCF 和 MSMQ 设置工作流应用程序的 Word 文档:http: //www.microsoft.com/en-us/download/details.aspx?id= 21245

于 2012-09-21T00:10:37.890 回答