【问题标题】:Getting data into a Windows Workflow instance将数据导入 Windows 工作流实例
【发布时间】:2009-01-28 06:37:01
【问题描述】:

我们目前正在构建一个系统,该系统从其他一些系统中抽象出有关 Web 服务的各种技术细节。它有点像企业总线,但功能更多。

我们决定使用 Windows 工作流来处理请求。一旦我们弄清楚请求了什么样的操作,我们将启动一个专门设计用于处理该操作的工作流。 现在,我们将调用的一些 Web 服务是异步的,因此工作流应该等待响应。 基本思想是,我们将在我们端实现回调 Web 服务,当回调“以某种方式”到达时,将其数据提供给正在等待响应的正在运行的工作流。

到目前为止,我已经看到了两种可能性:

  1. ExternalDataExchangeService
  2. WorkflowQueuingService

第一个服务相对容易使用,但是是基于事件的,所以如果你错过了事件,你就会错过数据。我们需要一个基于队列的解决方案,因为从技术上讲,甚至在我们获得告诉我们很快就会收到回调的同步响应之前,就可以从 Web 服务接收回调。

第二项服务看起来很完美,但它的使用方式非常有限。 将项目放入队列非常简单,但我们需要先确保队列存在,然后才能执行此操作。并且创建队列似乎只能在 Activity 的 Execute 覆盖中实现。 由于我们有很多不同的工作流,我们有一个基础工作流类,它在它的 Initialize 覆盖中执行一些工作,并且非常希望在其中创建队列,因此我们不必创建特殊的“Initialize”活动每个工作流程都应该开始。我们还希望在收到新项目时通知基类。因此,特定的工作流只需要等待 WaitHandle 就可以知道队列中有数据。 最后,我们希望能够从特定工作流上的代码活动中读取队列中的数据(在 WaitHandle 发出信号之后)。

有没有人有想法,不一定要使用我提到的两个服务,但我们真的希望让事情尽可能简单。

【问题讨论】:

    标签: .net workflow-foundation


    【解决方案1】:

    在 WF 中,运行时或服务与实际工作流之间的所有通信都是基于队列的。 ExternalDataExchangeService 似乎使用事件,但这些只是围绕 WorkflowQueuingService 和 WorkflowQueue 机制的一个薄层。

    一般来说,我更喜欢使用 WorkflowQueuingService,因为它可以提供完全控制。一旦您了解了基础知识,在大多数情况下使用 ExternalDataExchangeService 会更容易。

    【讨论】:

      【解决方案2】:

      原来我的假设是错误的。我 100% 确定我已经测试了该场景并遇到了问题,但在与一位同事讨论后,我重新测试了它,并且 ExternalDataExchangeService 工作得很好。因此无需寻找更复杂的解决方案,现在我们只需使用 ExternalDataExchangeService 即可。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-26
        • 1970-01-01
        • 2018-10-09
        • 1970-01-01
        • 2017-01-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多