Я пытаюсь заставить StateMachine выполнить некоторое действие базы данных между состояниями.
Итак, у меня есть «начальное» состояние, которое использует CallExternalMethodActivity для вызова функции «BeginExecuteNonQuery» в классе, украшенном ExternalDataExchangeAttribute. После этого он использует SetStateActivity для перехода в «конечное» состояние.
В «конечном» состоянии используется HandleExternalEventActivity для прослушивания события «EndExecuteNonQuery».
Я могу пройти через локальную службу в функцию "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