2010-12-13 43 views
5

我有一個WF4工作流程,具有多個接收功能。啓用持久性後,WF4中的多個接收活動失敗

工作流程運行良好,直到我添加持久性。我創建了持久性表,增加了以下的\配置\ system.serviceModel \我的web.config的行爲\ 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相同。

當持久性未啓用時,我不會收到此錯誤。有沒有人看過這個?我究竟做錯了什麼?

回答

1

你是否初始化相關性並確保你的接收活動在相同的密鑰上相關?如果你還沒有閱讀基於內容的關聯,你會想要閱讀它。

添加名爲「sharedHandle」的CorrelationHandle類型的工作流變量,並在您的Create調用中使用「查詢相關初始化程序」初始化「sharedHandle」。該屬性將所有接受調用的東西都接受爲參數。