2

私たちは、ドキュメントのライフサイクルを管理するためのビジネスロジックを持っています。
これは、Workflow Foundation 4とWF Persistenceを使用して実装されています。 ワークフローの実行中にワークフロー内に特定のブックマークが作成され、スケジュールされたタスクが定期的にすべての特定のブックマークを見つけてワークフローを再開する (実行されているアクティビティはいくつかの処理を行い、ワークフローを再びブックマークしてワークフローを再開できる。それ以降)DurableInstancing.InstanceNotReadyExceptionを引き起こす原因は何ですか?どうすれば修正できますか?

は今、ワークフローの実行中のインスタンスのいくつかのために、私たちは、次のエラーが表示されます

 
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) 

は、以前に同じインスタンスが正常にロードされました。

私はこの例外に関連した質問のカップルを持っている:

  • 私たちは、この例外を得ることができますか?
  • 私たちが出た場合、この例外は、同じインスタンスが後で再開することができるようにそれを処理する任意の優雅な方法は何ですか?
  • もあるため、この例外の再開することができなかった既存のワークフローインスタンスを固定する方法はありますか?

答えて

0

これは、ワークフローを一貫して変更している開発マシンでですか?以前このエラーが発生し、パーシステンスデータベースをクリーンアップしなければなりませんでした。ここであなたのためにそれを行うスクリプトです。

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 

これがうまくいけば教えてください!

関連する問題