0

Je suis un peu nouveau à la base de Windows Workflow, donc cela peut être très simple, mais je suis coincé avec elle. J'ai un flux de travail séquentiel très simple et il y a quelques activités de code dans une activité de portée de transaction.Windows workflow ne se termine pas après l'échec de la transaction

Je courais mon flux de travail de l'application de la console ayant le code suivant:

 Activity workflow = new Process(); 
     var inputArgument = new Dictionary<string, object>(); 
     inputArgument["Argument 1"] = 1234567; 
     inputArgument["Argument 2"] = 1234567; 
     inputArgument["Argument 3"] = "GUID"; 
     inputArgument["Aggument 4"] = @"\\filepath\"; 

     var syncEvent = new AutoResetEvent(false); 

     var workflowApp = new WorkflowApplication(workflow, inputArgument); 

     workflowApp.OnUnhandledException = 
      delegate (WorkflowApplicationUnhandledExceptionEventArgs e) 
      { 
       return UnhandledExceptionAction.Terminate; 
      }; 

     workflowApp.Completed += 
      delegate (WorkflowApplicationCompletedEventArgs e) 
      { 
       syncEvent.Set(); 
      }; 

     workflowApp.Run(); 

     syncEvent.WaitOne(); 

si je ne fais pas de transaction activité scope mon flux de travail fonctionne bien et, en cas d'exception l'instance de workflow Met fin et ma proximité d'application de la console ainsi que. Toutefois, lorsque j'ajoute une activité d'étendue de transaction et qu'une activité échoue dans Transaction Scope, mon instance de flux de travail continue à fonctionner, tout comme ma console. Quelqu'un peut-il me guider comment mettre fin à l'instance?

Je ne gère aucune exception dans mon flux de production et je souhaite que ce soit comme cela afin que je puisse enregistrer les détails de l'exception.

Répondre

2

Si vous accédez aux propriétés sur le TransactionScope dans le workflow, il existe une propriété définie sur true par défaut, appelée AbortInstanceOnTransactionFailure. Réglez-le sur false. Il devrait alors se comporter comme prévu.

Lorsque cette option est activée, l'instance de flux de travail s'interrompt mais ne se termine pas.

+0

Merci, cela a fonctionné. Juste pour ma connaissance pouvez-vous me faire savoir s'il est préférable de garder 'AbortInstanceOnTransactionFailure' à' True' ou 'False'. Mon Worflow sera initié à partir du service WCF ainsi que de la console. – nido

+0

La définition de 'false' propage l'exception à l'appelant. Quand c'est vrai, il exécute silencieusement la restauration. Je n'ai jamais trouvé une instance où ** je n'ai pas voulu être averti d'une exception, donc j'ai toujours défini cette propriété sur false. Je pense que dans les deux cas d'utilisation, le laisser comme "faux" est logique et presque chaque exemple de transaction WF que j'ai vu l'a mis à "faux". – helmsb