2010-12-13 9 views
5

Tengo un flujo de trabajo WF4 con múltiples funciones de recepción.Las actividades de recepción múltiple en WF4 fallan cuando la persistencia está habilitada

El flujo de trabajo funciona bien hasta que agregue persistencia. He creado las tablas de persistencia y añadió lo siguiente a la \ configuration \ system.serviceModel \ comportamientos \ serviceBehaviors sección de mi web.config:

<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> 

El flujo de trabajo acepta un parámetro que es una instancia de un POCO WorkflowInstanceDTO tengo definido.

Cuando ejecuto el flujo de trabajo con el siguiente código

var wfi = new WFService.WorkflowInstanceDTO() 
    { 
     Id = 1, 
     InstanceId = new Guid(), 
     Description = "Awesome WFI", 
     WorkflowId = 1 
    }; 
    proxy.Create(wfi); 

Se produce un error en la línea proxy.Create con el siguiente error.

Una clave de instancia del valor '11e5cf14-c2a8-0fbf-d3b5-c12a91c174ff' ya existe. Esto podría deberse a que hay múltiples MessageQuerySets definidos que se evalúan con la misma CorrelationKey.

Cuando la persistencia no está habilitada, no obtengo este error. ¿Alguien ha visto esto? ¿Qué estoy haciendo mal?

Respuesta

1

¿Inicializa la correlación y correlaciona sus actividades de recepción con la misma clave? Si todavía no lo ha hecho, querrá leer sobre la correlación basada en el contenido.

Agregue una variable de flujo de trabajo llamada "sharedHandle" de tipo CorrelationHandle y en su llamada Create, inicialice "sharedHandle" con un "Inicializador de correlación de consultas". La propiedad sería algo que todas las llamadas recibirían como argumento.

Cuestiones relacionadas