我正在使用WF 3.5,在启动几个WorkflowRuntimes的过程中,我有时会遇到以下异常:
System.Data.SqlClient.SqlException: Transaction (Process ID 108) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.HasMoreRows()
at System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout)
at System.Workflow.Runtime.Hosting.PersistenceDBAccessor.RetrieveNonblockingInstanceStateIds(Guid ownerId, DateTime ownedUntil)
at System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService.RecoverRunningWorkflowInstances()
at System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService.OnStarted()
at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
at System.Workflow.Runtime.WorkflowRuntime.StartRuntime()
我认为运行多个WorkflowRuntimes是可以的。我正在加倍,因为我正在将工作负载分配给不同的服务器,但所有服务器都在同一个数据库中。有什么想法吗?
答案 0 :(得分:0)
找到了答案!
我应该使用启用锁定的SqlWorkflowPersistenceService构造函数:
SqlWorkflowPersistenceService构造函数(String,Boolean,TimeSpan,TimeSpan) http://msdn.microsoft.com/en-us/library/ms608171(v=VS.90).aspx