2

StateMachineに状態間のデータベースアクションを実行させようとしています。StateMachineでCallExternalMethodActivity/HandleExternalEventActivityを使用する

私は、CallExternalMethodActivityを使用してExternalDataExchangeAttributeで装飾されたクラスで "BeginExecuteNonQuery"関数を呼び出す "開始"状態を持っています。その後、SetStateActivityを使用して「終了」状態に変更されます。

「終了」状態は、「EndExecuteNonQuery」イベントを待機するためにHandleExternalEventActivityを使用します。

"BeginExecuteNonQuery"関数にローカルサービスを介してステップインできます。

問題は、 "EndExecuteNonQuery"がnullであることです。

public class FailoverWorkflowController : IFailoverWorkflowController 
{ 
    private readonly WorkflowRuntime workflowRuntime; 

    private readonly FailoverWorkflowControlService failoverWorkflowControlService; 
    private readonly DatabaseControlService databaseControlService; 

    public FailoverWorkflowController() 
    { 
     workflowRuntime = new WorkflowRuntime(); 
     workflowRuntime.WorkflowCompleted += workflowRuntime_WorkflowCompleted; 
     workflowRuntime.WorkflowTerminated += workflowRuntime_WorkflowTerminated; 

     ExternalDataExchangeService dataExchangeService = new ExternalDataExchangeService(); 
     workflowRuntime.AddService(dataExchangeService); 

     databaseControlService = new DatabaseControlService(); 
     workflowRuntime.AddService(databaseControlService); 

     workflowRuntime.StartRuntime(); 
    } 

    ... 
} 

...

public void BeginExecuteNonQuery(string command) 
{ 
    Guid workflowInstanceID = WorkflowEnvironment.WorkflowInstanceId; 

    ThreadPool.QueueUserWorkItem(delegate(object state) 
            { 
             try 
             { 
              int result = ExecuteNonQuery((string)state); 
              EndExecuteNonQuery(null, new ExecuteNonQueryResultEventArgs(workflowInstanceID, result)); 
             } 
             catch (Exception exception) 
             { 
              EndExecuteNonQuery(null, new ExecuteNonQueryResultEventArgs(workflowInstanceID, exception)); 
             } 
            }, command); 
} 

私は私の実装で間違って何をしているのですか?

-Stan

答えて

1

私はコードスニペットから教えていますが、あなたのサービスをホストするExternalDataExchangeServiceを使用していて、実行時に直接サービスを追加していないことを確認することはできません。 ExternalDataExchangeServiceは、必要なイベントハンドラを追加し、イベントをワークフローのキューに入れられたメッセージに変換します。

+0

私は –

+0

...私はあなたが見ることのために多くのコードを投稿します ... ExternalDataExchangeServiceを使用していますが、あなたは正しいです。 ..私はExternalDataExchangeServiceを使用していません... 私はそれがどのように行くのを試してみましょう... –

+0

うん... あなたは右だった.. –

0

hereを示したように、私は私の設定ファイルを変更することにより、コードなしExternalDataExchangeServiceを使用しています:

関連する問題