2013-07-19 95 views
1

我已經在一個相當複雜的系統恢復工作流困擾的錯誤,到目前爲止只有很少的運氣找到一個解決方案,它加載更新的活動。無法從實例存儲

的錯誤,當我恢復工作流程發生。工作流和活動已經發生了變化,但有一些版本控制不應該影響到這一點。恢復操作將帶出舊版本的xaml文件並調用舊版本的這些活動,並且現在一年來運行良好。

開始測試該系統的新版本,突然我得到這個錯誤: 實例「一些GUID」的實例存儲被發現,但實例不是一個工作流實例

這發生在worklfow的恢復方法,特別是在這條線:

application.Load(resumeContext.WorkflowInstanceId); 

在數據庫中,我可以找到該GUID實例,所以我不明白爲什麼它不會加載它看起來還好。

我發現只有在one page此錯誤的整個谷歌,而且也沒有答案,所以它的沙漠在那裏。

堆棧跟蹤是無用的:

Exception: System.Exception: Exception of type 'System.Exception' was thrown. 

    at System.Activities.WorkflowApplication.ExtractRuntimeState(IDictionary`2 values, Guid instanceId) 
    at System.Activities.WorkflowApplication.ProcessInstanceValues(IDictionary`2 values, Object& deserializedRuntimeState) 
    at System.Activities.WorkflowApplication.LoadCore(DynamicUpdateMap updateMap, TimeoutHelper timeoutHelper, Boolean loadAny, IDictionary`2 values) 
    at System.Activities.WorkflowApplication.Load(Guid instanceId, TimeSpan timeout) 
    at System.Activities.WorkflowApplication.Load(Guid instanceId) 
    at Project.TS.Services.Workflows.Hosting.ActivityInvoker.Resume[TResponse](WorkflowApplication application, InstanceStore instanceStore, ResumeBookmarkContext`1 resumeContext, IDictionary`2& outArguments) 
    in c:\Projects\TS\trunk\Services\Workflows\Hosting\ActivityInvoker.cs:line 186 

一些更多的信息。它的工作方式是操作對象包含工作流版本,名稱和實際XAML和這個被加載到工作流應用程序和被調用:

var workflowDefinition = activityResolver.Resolve(new WorkflowIdentity(operation.WorkflowVersion, operation.WorkflowName, operation.WorkflowXaml)); 

var application = new WorkflowApplication(workflowDefinition.Implementation); 

response = activityInvoker.Resume<ResumeOperationResponse>(application, instanceStoreProvider.Create(), resumeContext, out outArguments); 

調用者的簡歷方法做到這一點和失敗內幕:

public TResponse Resume<TResponse>(WorkflowApplication application, InstanceStore instanceStore, ResumeBookmarkContext<ResumeOperationRequest> resumeContext, 
     out IDictionary<String, object> outArguments) 
     where TResponse : ResumeOperationResponse, new() 
    { 
     var response = new TResponse(); 
     outArguments = new Dictionary<string, object>(); 
     IDictionary<string, object> wfOutArguments = new Dictionary<string, object>(); 

     application.InstanceStore = instanceStore; 

     try 
     { 
      application.Load(resumeContext.WorkflowInstanceId); 
     } 
     catch (Exception exp) 
     { 
      //Exception happens here 
     } 
    } 

在這一點上我是什麼導致這個感興趣的指針。

似乎有沒有辦法調試和找到問題的真正原因。當你把Load方法在嘗試捕捉

非常感謝

+0

WF是在後端,所以我覺得你的痛苦。那裏確實是一片沙漠。你知道你試圖恢復的工作流程是否成功持續嗎?在那裏,有任何機會,堅持錯誤之前,這樣的實例永遠不會恢復,因此它不能恢復?只是一個想法。 – Tombala

+0

另外,您是否在執行時處理所有WorkflowApplication事件?如果您在執行時添加所有事件處理程序以查看您嘗試恢復的工作流是否真的成功,它可能會幫助您「調試」。 – Tombala

+0

那麼實例存儲包含實例數據,其中包含恢復書籤,即使我對實例存儲不太熟練,它看起來沒有什麼不同,實際上工作的其他書籤。至於工作流本身,我們有內部邏輯,用於存儲在首次創建的操作時使用的xaml的版本,並且我已經調試過它並且看起來正確。我將在我的問題中添加一些代碼 – Nick

回答

0

的工作流應用程序拋出這個錯誤。在我的應用程序中,如果我將Load方法調用放在try/catch中,它會在調用方法之前更改guid,從而引發此異常。 我的修補程序是從此方法中取出try catch,並將其添加到調用此方法的調用方。