我有一個windows服務,運行工作流程。工作流程是從數據庫加載的XAML(用戶可以使用rehosted設計器定義自己的工作流程)。它配置了一個SQLWorkflowInstanceStore實例,以在空閒時保持工作流程。 (它基本上來自Microsoft的WCF/WF示例的\ ControllingWorkflowApplications中的示例代碼)。WF4 InstancePersistenceCommand中斷
但有時會出現錯誤象下面這樣:
System.Runtime.DurableInstancing.InstanceOwnerException:一個InstancePersistenceCommand的執行被中斷,因爲所有者ID「a426269a-be53-44e1-8580-4d0c396842e8實例所有者註冊'已經失效了。此錯誤表示由此所有者鎖定的所有實例的內存中副本已過時,應與InstanceHandles一起丟棄。通常,最好通過重新啓動主機來處理此錯誤。
我一直在試圖找到原因,但它很難在開發中重現,但在生產服務器上,我偶爾會得到它。我發現的一個提示是:當我查看LockOwnersTable時,發現LockOnwersTable lockexpiration設置爲01/01/2000 0:0:0,並且不再更新,而在正常情況下,應該每隔x秒更新一次主機鎖更新期...
那麼,爲什麼要SQLWorkflowInstanceStore停止更新此LockExpiration,我該如何檢測它的原因呢?
剛請嘗試從基本文件夾中的Microsoft WF示例中獲取示例ControllingWorkflowApplications。啓動一個Parallel1.xaml(包含在示例中)。然後停止sql server服務至少30秒。重新啓動sql server並嘗試恢復書籤,它會中止工作流程... – rekna
@rekna - 我們遇到同樣的問題 - 您是否曾經找到過解決方案? –
不幸的是沒有......我有一個MS開放的案例,但在這一刻,我沒有收到他們的回覆。我正在使用一種解決方法(從完美的角度來看),它監視工作流數據庫以確定鎖定吸入是否仍然有效,如果不是,則重新啓動工作流實例。我真的不明白它背後的邏輯。我希望我可以編寫一個自定義實例存儲,但MS使它變得複雜。實際上不可能從現有的實例商店中派生出來。 – rekna