我有一个带有多个接收功能的WF4工作流程。
工作流运行正常,直到我添加持久性。我创建了持久性表,并将以下内容添加到web.config的\ configuration \ system.serviceModel \ behaviors \ serviceBehaviors部分:
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true" />
<sqlWorkflowInstanceStore connectionStringName="InstanceStore"
instanceCompletionAction="DeleteAll"
instanceLockedExceptionAction= "NoRetry"
instanceEncodingOption="None"
hostLockRenewalPeriod="00:01:00"
/>
</behavior>
工作流接受一个参数,该参数是我定义的WorkflowInstanceDTO POCO的实例。
当我使用以下代码运行工作流程时
var wfi = new WFService.WorkflowInstanceDTO()
{
Id = 1,
InstanceId = new Guid(),
Description = "Awesome WFI",
WorkflowId = 1
};
proxy.Create(wfi);
它在proxy.Create行上失败,出现以下错误。
值为'11e5cf14-c2a8-0fbf-d3b5-c12a91c174ff'的实例键 已经存在。这可能是因为有多个 MessageQuerySets定义为评估相同的CorrelationKey。
如果未启用持久性,我不会收到此错误。有没有人见过这个?我做错了什么?
答案 0 :(得分:1)
您是否初始化相关性并且您的接收活动是否与相同的密钥相关联?如果你还没有,你会想要阅读基于内容的相关性。
添加一个名为“sharedHandle”的工作流变量,类型为CorrelationHandle,在您的Create调用中,使用“查询关联初始值设定项”初始化“sharedHandle”。该属性将接受所有接收调用的内容作为参数接受。