1

かなり複雑なシステムでワークフローを再開する際のエラーに悩まされてきましたが、これまでのところ解決策を見つけることができませんでした。

ワークフローを再開するとエラーが発生します。ワークフローとアクティビティは変更されましたが、それに影響を与えるべきではないバージョン管理が行われています。操作を再開すると、古いバージョンの xaml ファイルが表示され、これらのアクティビティの古いバージョンが呼び出されます。これは、1 年間うまく機能しています。

新しいバージョンのシステムのテストを開始したところ、突然次 のエラーが発生しました: インスタンス 'some GUID' がインスタンス ストアで見つかりましたが、インスタンスはワークフロー インスタンスではありません

これは、worklfow の Resume メソッド、特に次の行で発生します。

application.Load(resumeContext.WorkflowInstanceId);

データベースで、その Guid を持つインスタンスを見つけることができますが、問題ないように見えるので、なぜロードされないのか理解できません。

Google 全体でこのエラーのあるページを 1 つだけ見つけましたが、それに対する回答がないため、そこは砂漠です。

スタック トレースは役に立たない:

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);

インボーカー内では、resume メソッドがこれを実行して失敗します。

    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 
        }
    }

この時点で、これを引き起こしている可能性のあるもののポインタに興味があります。

それをデバッグして問題の実際の原因を突き止める方法はないようです。

どうもありがとう

4

1 に答える 1