2

Wir haben eine Geschäftslogik zur Verwaltung des Dokumentenlebenszyklus.
Dies wird mit Workflow Foundation 4 und WF Persistence implementiert. Während der Ausführung des Workflows werden bestimmte Lesezeichen im Workflow erstellt und ein geplanter Task findet regelmäßig alle spezifischen Lesezeichen und setzt den Workflow fort. (Die ausgeführte Aktivität führt eine Verarbeitung durch und markiert den Workflow erneut, damit der Workflow fortgesetzt werden kann . später)Was könnte eine DurableInstancing.InstanceNotReadyException verursachen und wie kann ich sie beheben?

Jetzt für einige der laufenden Instanzen des Workflows, erhalten wir den folgenden Fehler:

 
System.Runtime.DurableInstancing.InstanceNotReadyException was unhandled 
    Message=The execution of an InstancePersistenceCommand was interrupted because the instance '99ce9413-5b17-4de0-a453-46891509e032' has not yet been persisted to the instance store. 
    Source=System.Runtime.DurableInstancing 
    StackTrace: 
     at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result) 
     at System.Runtime.DurableInstancing.InstancePersistenceContext.OuterExecute(InstanceHandle initialInstanceHandle, InstancePersistenceCommand command, Transaction transaction, TimeSpan timeout) 
     at System.Runtime.DurableInstancing.InstanceStore.Execute(InstanceHandle handle, InstancePersistenceCommand command, TimeSpan timeout) 
     at System.Activities.WorkflowApplication.PersistenceManager.Load(TimeSpan timeout) 
     at System.Activities.WorkflowApplication.LoadCore(TimeSpan timeout, Boolean loadAny) 
     at System.Activities.WorkflowApplication.Load(Guid instanceId, TimeSpan timeout) 
     at System.Activities.WorkflowApplication.Load(Guid instanceId) 

zuvor die gleichen Instanzen wurden erfolgreich geladen.

Ich habe ein paar Fragen zu dieser Ausnahme bezogen werden:

  • Wenn wir diese Ausnahme zu bekommen?
  • Wenn wir diese Ausnahme bekommen, gibt es irgendeine anmuthige Art, sie zu behandeln, damit dieselben Instanzen später wieder aufgenommen werden können?
  • Gibt es auch eine Möglichkeit, die bestehenden Workflow-Instanzen zu reparieren, die wegen dieser Ausnahme nicht fortgesetzt werden konnten?

Antwort

0

Ist dies auf Ihrer Entwicklungsmaschine, in der Sie ständig Änderungen an den Arbeitsabläufen vornehmen? Ich habe diesen Fehler zuvor erhalten und musste meine Persistenzdatenbank bereinigen. Hier ist ein Skript, das das für Sie tun wird.

use [AppFabricPersistenceStore] 

set nocount on 

declare @InstanceId uniqueidentifier 
declare @SurrogateInstanceId bigint 

declare csr cursor fast_forward for 
    select InstanceId from [System.Activities.DurableInstancing].Instances 

open csr 
fetch next from csr into @InstanceId 

while @@fetch_status = 0 
begin 
    (
     select @SurrogateInstanceId = SurrogateInstanceId 
     from [System.Activities.DurableInstancing].InstancesTable i 
     where i.Id = @InstanceId 
    ) 

    execute [System.Activities.DurableInstancing].DeleteInstance @SurrogateInstanceId 

    fetch next from csr into @InstanceId 
end 

close csr 
deallocate csr 

Lassen Sie mich wissen, ob dies für Sie funktioniert!