2011-01-24 3 views
1

私は、永続性のためにSQL Durable Instancingを使用して、worflow foundation 4でワークフローを実行しています。WF4を使用した断続的なInstanceOwnerException

場合によっては、ワークフローを再開するときにSystem.Runtime.DurableInstancing.InstanceOwnerExceptionが発生することがあります。

System.Runtime.DurableInstancing.InstanceOwnerException occurred 

    Message="The execution of an InstancePersistenceCommand was interrupted because the instance owner registration for owner ID 'd2db07fd-f31d-458c-be53-de163d5db8d4' has become invalid. This error indicates that the in-memory copy of all instances locked by this owner have become stale and should be discarded, along with the InstanceHandles. Typically, this error is best handled by restarting the host." 

    Source=System.Runtime.DurableInstancing 

    StackTrace: 
     à System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result) 
     à System.Runtime.DurableInstancing.InstancePersistenceContext.ExecuteAsyncResult.End(IAsyncResult result) 
     à System.Runtime.DurableInstancing.InstancePersistenceContext.OuterExecute(InstanceHandle initialInstanceHandle, InstancePersistenceCommand command, Transaction transaction, TimeSpan timeout) 
     à System.Runtime.DurableInstancing.InstanceStore.Execute(InstanceHandle handle, InstancePersistenceCommand command, TimeSpan timeout) 
     à System.Activities.WorkflowApplication.PersistenceManager.Load(TimeSpan timeout) 
     à System.Activities.WorkflowApplication.LoadCore(TimeSpan timeout, Boolean loadAny) 
     à System.Activities.WorkflowApplication.Load(Guid instanceId, TimeSpan timeout) 
     à System.Activities.WorkflowApplication.Load(Guid instanceId) 

この例外を回避する手段はありますか?

答えて

1

これは通常、以前の実行が正常に完了せず、元のロックの有効期限が切れる前に再起動された結果です。これは編集/デバッグ/編集サイクルの結果として、または実稼働環境で起こっていますか?

HostLockRenewalPeriod設定を使用してロック期間を調整することができます。それを本当の低い値に設定することは、通常はお勧めできません。

+0

あなたは正しいです、それはデバッグ中に起こりました。 正しく理解すると、永続化されたWorkflowインスタンスは、ロックを正しく解放しなかった以前の実行によってロックされました。この問題は、HostLockRenewalPeriodを小さくしてロックの有効期限を短くすることで制限できますが、ワークフローエンジンはロックを頻繁にリフレッシュし、データベースの負荷が増えます。 – olorin

+0

私はちょうど私がチェックするつもりだと思ったが、元のロックが 'SurrogateLockOwnerId'によって失効されたかどうかを知ることができます(' SqlWorkflowInstanceStore'を使用している場合)。 – JasonRShaver

関連する問題