2012-01-19 5 views
0

インスタンスストアからワークフローをロードしようとすると問題が発生します。そのワークフローを逆シリアル化できないようです。インスタンスストアからワークフローをロードするとエラーが発生します。タイプが見つかりません

これは私のコードです:

//Get workflow through WorkflowDefinitionManager 
     Activity workflow = WorkflowDefinitionManager.GetWorkflow(wfDefinitionId); 

     //Create wf application 
     WorkflowApplication instance = new WorkflowApplication(workflow); 
     instance.InstanceStore = InstanceStore; 

     instance.Completed += WorkflowApplication_OnCompleted; 
     instance.Aborted += WorkflowApplication_OnAborted; 
     instance.Idle += WorkflowApplication_OnIdle; 
     instance.OnUnhandledException += WorkflowApplication_OnUnhandledException; 
     instance.PersistableIdle += WorkflowApplication_OnPersistableIdle; 

     instance.Load(inGuid); //<--- I get the error here 

エラー:理由は型「System.Activities.Variable`1 + VariableLocation [[MYCLASS、MYASSEMBLY、バージョン=

デシリアライザはデシリアライズするタイプをロードすることはできません1.0.0.0、Culture = neutral、PublicKeyToken = null]] 'アセンブリ' System.Activities、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35 'で見つかりませんでした。シリアライズされる型が、デシリアライズされる型と同じコントラクトを持ち、同じアセンブリが使用されていることを確認してください。

ワークフローを開始して永続化することができない場合は、なぜこのエラーが発生するのか分かりません。 私たちを手伝ってくれますか?してください

ありがとう

答えて

0

は最後に、私は、実行時にアセンブリを解決する私のエラーを解決:

AppDomain appDomain = AppDomain.CurrentDomain; 
appDomain.AssemblyResolve += AppDomain_AssemblyResolve; 
instance.Load(inGuid); 
appDomain.AssemblyResolve -= AppDomain_AssemblyResolve; 

これはコールバックです:

private Assembly AppDomain_AssemblyResolve(object sender, ResolveEventArgs e) 
    { 

     try 
     { 
      string strTempAssmbPath = ExtensionsFolder + e.Name.Substring(0, e.Name.IndexOf(",")) + ".dll"; 
      return Assembly.LoadFile(strTempAssmbPath); 
     } 
     catch (Exception ex) 
     { 
      log.Error(ex); 

     } 
     return null; 
    } 
0

いくつかの理由があります。

最も一般的なのは、ワークフローの定義が、永続化されてからリロードするまでの間に変更されたことです。これは現時点では行かない。

もう1つの可能性は、ワークフローが1台のマシンで開始され、後で再開するために必要なアセンブリをすべて持たない別のマシンでワークフローが再開されることです。

もう1つの可能性は、他のコードが最初に実行されるために既に読み込まれており、ワークフロー状態をリロードするときに読み込まれないことです。通常、アセンブリはCLRルールを使用して見つけられロードされますが、通常のルールでは使用できない場合があります。

関連する問題