2010-12-13 7 views
5

Ich habe einen WF4-Workflow mit mehreren Empfangsfunktionen.Mehrere Empfangsaktivitäten in WF4 schlagen fehl, wenn Persistenz aktiviert ist

Der Workflow läuft gut, bis ich die Persistenz hinzufüge. Ich habe die Ausdauer Tabellen und addierten die folgenden in das Verzeichnis \ configuration \ system.serviceModel \ Verhaltensweisen \ serviceBehaviors Abschnitt meiner 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> 

Der Workflow übernimmt einen Parameter, der eine Instanz eines WorkflowInstanceDTO POCO ist, ich habe definiert.

Wenn ich laufe den Workflow mit dem folgenden Code

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

Es ist mit dem folgenden Fehler auf der proxy.Create Linie versagt.

Eine Instanz Schlüssel-Wert '11e5cf14-c2a8-0fbf-d3b5-c12a91c174ff' bereits vorhanden ist. Dies könnte daran liegen, dass mehrere MessageQuerySets definiert sind, die denselben CorrelationKey als auswerten.

Wenn die Persistenz nicht aktiviert ist, bekomme ich diesen Fehler nicht. Hat jemand das gesehen? Was mache ich falsch?

Antwort

1

Initialisieren Sie die Korrelation und korrelieren Ihre Empfangsaktivitäten mit demselben Schlüssel? Sie werden über die inhaltliche Korrelation lesen wollen, wenn Sie das nicht bereits getan haben.

Fügen Sie eine Arbeitsablaufvariable namens "sharedHandle" vom Typ CorrelationHandle hinzu, und initialisieren Sie bei Ihrem Create call "sharedHandle" mit einem "Query initializer". Die Eigenschaft würde etwas, das alle Anrufe entgegennehmen würde, als Argument akzeptieren.