我们目前正在构建一个系统,从其他系统中抽象出有关Web服务的各种技术细节。它有点像企业总线,但它确实更多。
我们决定使用Windows Workflow来处理请求。一旦我们确定要求采取何种行动,我们就会启动专门设计用于处理行动的工作流程。 现在,我们称之为的一些Web服务是异步的,因此工作流应该等待答案。 基本的想法是,我们将在最后实现回调Web服务,当回调到达时“以某种方式”将数据提供给正在等待答案的正在运行的工作流。
到目前为止,我已经看到了两种可能性:
第一项服务相对易于使用,但基于事件,因此如果您错过了该活动,则会错过数据。我们需要一个基于队列的解决方案,因为技术上可以从Web服务接收回调,甚至在我们得到同步响应之前就告诉我们我们很快就会收到回调。
第二项服务似乎很完美,但它的使用方式非常有限。 将项目放入队列非常简单,但我们需要确保队列存在才能完成。并且只有在Activity的Execute重写中才能创建队列。 由于我们有很多不同的工作流,我们有一个基础工作流类,它在其初始化覆盖中做了一些工作,非常想在那里创建队列,所以我们不必创建一个特殊的“初始化”活动每个工作流程都应该从一开始。我们还希望收到关于何时收到新项目在基类中的通知。因此,特定的工作流只需要等待WaitHandle就知道队列中有数据。 最后,我们希望能够从特定工作流的代码活动中读取队列中的数据(在WaitHandle发出信号后)。
有没有人有想法,不必使用我提到的两项服务,但我们真的希望尽可能保持简单。
答案 0 :(得分:1)
在WF中,运行时或服务与实际工作流之间的所有通信都是基于队列的。 ExternalDataExchangeService似乎使用事件,但这些只是WorkflowQueuingService和WorkflowQueue机制的一个薄层。
一般情况下,我更喜欢使用WorkflowQueuingService,因为它可以完全控制。一旦理解了基础知识,在大多数情况下使用ExternalDataExchangeService就更容易了。
答案 1 :(得分:0)
原来我的假设是错误的。我100%肯定我已经测试了这个场景并遇到了问题,但在与同事讨论之后我重新测试了它并且ExternalDataExchangeService工作得很好。所以不需要找到更复杂的解决方案,现在我们只需要使用ExternalDataExchangeService。