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