0

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

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

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

  1. 外部数据交换服务
  2. 工作流队列服务

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

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

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

4

2 回答 2

1

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

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

于 2009-01-08T13:11:52.523 回答
0

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

于 2009-01-27T22:37:01.863 回答