【发布时间】:2009-01-28 06:37:01
【问题描述】:
我们目前正在构建一个系统,该系统从其他一些系统中抽象出有关 Web 服务的各种技术细节。它有点像企业总线,但功能更多。
我们决定使用 Windows 工作流来处理请求。一旦我们弄清楚请求了什么样的操作,我们将启动一个专门设计用于处理该操作的工作流。 现在,我们将调用的一些 Web 服务是异步的,因此工作流应该等待响应。 基本思想是,我们将在我们端实现回调 Web 服务,当回调“以某种方式”到达时,将其数据提供给正在等待响应的正在运行的工作流。
到目前为止,我已经看到了两种可能性:
- ExternalDataExchangeService
- WorkflowQueuingService
第一个服务相对容易使用,但是是基于事件的,所以如果你错过了事件,你就会错过数据。我们需要一个基于队列的解决方案,因为从技术上讲,甚至在我们获得告诉我们很快就会收到回调的同步响应之前,就可以从 Web 服务接收回调。
第二项服务看起来很完美,但它的使用方式非常有限。 将项目放入队列非常简单,但我们需要先确保队列存在,然后才能执行此操作。并且创建队列似乎只能在 Activity 的 Execute 覆盖中实现。 由于我们有很多不同的工作流,我们有一个基础工作流类,它在它的 Initialize 覆盖中执行一些工作,并且非常希望在其中创建队列,因此我们不必创建特殊的“Initialize”活动每个工作流程都应该开始。我们还希望在收到新项目时通知基类。因此,特定的工作流只需要等待 WaitHandle 就可以知道队列中有数据。 最后,我们希望能够从特定工作流上的代码活动中读取队列中的数据(在 WaitHandle 发出信号之后)。
有没有人有想法,不一定要使用我提到的两个服务,但我们真的希望让事情尽可能简单。
【问题讨论】: