添加SendReply时的工作流接收关联

时间:2016-11-04 14:29:53

标签: c# .net workflow-foundation

我在工作流设计器中创建了一个简单的工作流,该工作流具有可在工作流启动后调用的Receive活动。 Receive与其中一个内容参数相关,这是我在工作流程中生成的GUID,并从最初的SendReply活动传回。

enter image description here

相关查询:sm:body()/ xgSc:DoSomething / xgSc:workflowId

我可以使用此测试方法执行工作流程:

[TestMethod]
public void Test()
{
    using (var client = new Test.ServiceClient())
    {
        var workflowId = client.StartWorkflow();
        client.DoSomething(workflowId.Value);
    }
}

这很好用,但是当我向接收添加SendReply活动时,它不再正确关联,并且在调用DoSomething时出现此错误:

  

InstancePersistenceCommand的执行被中断了,因为   实例键' aee2a4cc-24ec-9e0e-6f76-31ffe345ae27'不是   与实例关联。这可能是因为实例或密钥   已被清理,或因为密钥无效。关键可能是   如果生成的消息是错误发送的,则无效   时间或包含不正确的相关数据。

这是使用SendReply活动的工作流程:

enter image description here

将SendReply活动恢复原状并且工作正常,因此SendReply活动会以某种方式破坏相关性。

如何实现与Receive / SendReply对的相关性?

1 个答案:

答案 0 :(得分:0)

要使SendReply活动正常运行,必须使用CorrelationHandle对象设置Request-Reply Correlation。

首先,将新的CorrelationHandle类型变量添加到与Receive和SendReply活动相同的范围(或更高)中的工作流。

Variable

然后选择Receive活动,在属性窗格中单击CorrelationInitializers按钮以打开Add Correlation Initializers窗口。

单击“添加初始化程序”并键入CorrelationHandle变量的名称。

在相关类型ComboBox中选择“Request-reply correlation initializer”,然后单击“确定”关闭窗口。

enter image description here

或者,您可以将Recieve和SendReply活动放在CorrelationScope中,该活动为其包含的消息传递活动提供隐式CorrelationHandle。

enter image description here