我在工作流设计器中创建了一个简单的工作流,该工作流具有可在工作流启动后调用的Receive活动。 Receive与其中一个内容参数相关,这是我在工作流程中生成的GUID,并从最初的SendReply活动传回。
相关查询: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活动的工作流程:
将SendReply活动恢复原状并且工作正常,因此SendReply活动会以某种方式破坏相关性。
如何实现与Receive / SendReply对的相关性?
答案 0 :(得分:0)
要使SendReply活动正常运行,必须使用CorrelationHandle对象设置Request-Reply Correlation。
首先,将新的CorrelationHandle类型变量添加到与Receive和SendReply活动相同的范围(或更高)中的工作流。
然后选择Receive活动,在属性窗格中单击CorrelationInitializers按钮以打开Add Correlation Initializers窗口。
单击“添加初始化程序”并键入CorrelationHandle变量的名称。
在相关类型ComboBox中选择“Request-reply correlation initializer”,然后单击“确定”关闭窗口。
或者,您可以将Recieve和SendReply活动放在CorrelationScope中,该活动为其包含的消息传递活动提供隐式CorrelationHandle。