是否可以在工作流程中间更改相关性?

时间:2013-09-01 07:06:40

标签: workflow workflow-foundation-4 correlation

我在工作流的开头放了一个InitializeCorrelation活动,然后我想关联不同的密钥,所以我用另一个密钥放了另一个InitializeCorrelation活动,但是我收到了这个错误:

  

InstancePersistenceCommand的执行被中断,因为实例密钥'a765c209-5adc-4f03-9dd2-1af5e33aab3b'未与实例关联。这可能是因为实例或密钥已被清除,或者因为密钥无效。如果生成的消息是在错误的时间发送或包含不正确的关联数据,则密钥可能无效。

那么,是否可以在工作流程启动后更改相关性?

2 个答案:

答案 0 :(得分:0)

查看存储持久实例的数据库中的Instances表。其中一个条目可能具有挂起状态,还有一个列有一些错误描述。是什么导致了这个错误?您是否对工作流程进行了一些更改并进行了部署?

答案 1 :(得分:0)

要明确回答问题,是的,您可以根据相关性更改数据。您不仅可以在序列中执行此操作,还可以在Parallel活动的每个分支中使用不同的关联数据。可以使用InitializeCorrelation或SendReply活动初始化相关性,如下所述:http://msdn.microsoft.com/en-us/library/ee358755(v=vs.100).aspx

由于工作流设计器不是Visual Studio中最强大的部分(从未检查过XPath查询,有时甚至构建错误都不会反映在活动上等),通常情况并不总是很明显。所以,我建议如下:

  • 仅针对特定关联数据使用关联类型查询关联初始化CorrelationHandle
  • 为不同的关联数据初始化新的CorrelationHandle实例
  • 一旦初始化了CorrelationHandle,它可以在以后用于不同的Receive活动多次(Receive.CorrelatesOn,Receive.CorrelatesWith)
  • 如果关联不起作用,可能是因为错误的XPath查询。如果更改了OperationName或参数名称,则不会自动刷新这些内容。建议在重命名后重新生成它们
  • 在测试时关闭工作流程持久性和NLB是个好主意 - 让自己专注于与相关性相关的问题