Ich versuche, eine StateMachine einige Datenbankaktion zwischen Status auszuführen.Verwenden von CallExternalMethodActivity/HandleExternalEventActivity in StateMachine
So habe ich einen "Start" -Zustand, der CallExternalMethodActivity verwendet, um eine "BeginExecuteNonQuery" -Funktion für eine mit ExternalDataExchangeAttribute dekorierte Klasse aufzurufen. Danach verwendet es eine SetStateActivity, um in einen "Ending" -Zustand zu wechseln.
Der Zustand "ending" verwendet eine HandleExternalEventActivity, um ein "EndExecuteNonQuery" -Ereignis abzurufen.
Ich kann durch den lokalen Dienst in die "BeginExecuteNonQuery" -Funktion gehen.
Das Problem ist, dass die "EndExecuteNonQuery" null ist.
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);
}
Was bin ich mit meiner Implementierung falsch?
-stan
ich die ExternalDataExchangeService bin mit ... Ich werde mehr Code schreiben für Sie zu sehen ... –
Und Sie haben Recht. .. Ich verwende nicht den ExternalDataExchangeService ... Lass mich versuchen und sehen, wie es geht ... –
Yup ... Sie hatten Recht .. –