J'ai une application de flux de travail qui génère une erreur lorsque j'essaie d'appeler un événement à l'aide de ExternalDataExchangeService.Flux de travail avec l'ID "xxxxx" introuvable dans le magasin de persistance d'état
Flux de travail avec l'ID "866568ab-ca1b-4404-a2f1-2c8704539ef4" introuvable dans le magasin de persistance d'état.
L'événement "QAEngOrTLReject" sur le type d'interface "RecipeChangeService.IRecipeChangeService" pour l'ID d'instance "866568ab-ca1b-4404-a2f1-2c8704539ef4" ne peut pas être remis.
Voici mon code de mise en œuvre pour cela - S'il vous plaît aider Je suis coincé :(
Ci-dessous est l'interface et l'événement d'échange de données args -
public class RecipeChangeService : IRecipeChangeService{
#region IRecipeChangeService Members
public event EventHandler QAEngOrTLApprove;
public event EventHandler QAEngOrTLReject;
public bool QAEngOrTLApproved(Guid instanceId, ResponseDataObject rdo) {
if (QAEngOrTLApprove != null) {
QAEngOrTLApprove(this, new XMESWFRecipeResponseDataEventArgs(rdo, instanceId));
return true;
}return false;
}
public bool QAEngOrTLRejected(Guid instanceId, ResponseDataObject rdo) {
if (QAEngOrTLReject != null) {
QAEngOrTLReject(this, new XMESWFRecipeResponseDataEventArgs(rdo,instanceId));
return true;
} return false;
}
}
[Serializable]
public class XMESWFRecipeResponseDataEventArgs : ExternalDataEventArgs {
public readonly ResponseDataObject rdo = null;
public XMESWFRecipeResponseDataEventArgs(ResponseDataObject rdo, Guid instanceId)
: base(instanceId)
{
this.rdo = rdo;
}
}
L'événement est déclenché à l'aide -
IRecipeChangeService s =
ExceptionServices.GetExceptionService(WorkflowExceptionType.RecipeChange)
as IRecipeChangeService;
s.QAEngOrTLApproved(new Guid(instanceId), rdo);
Merci
J'ai ajouté le service de persistance de façon déclarative. Comment est-ce que je devrais m'assurer si son fonctionne correctement. Je suis certain que le workflow est en mémoire et n'est pas terminé. – ksa
Ouvrez la base de données dans laquelle vous persistez les flux de travail et vérifiez la table InstanceState. Il devrait y avoir un enregistrement pour chaque flux de travail connu. Vous pouvez vérifier si votre flux de travail est en mémoire à l'aide de la fonction GetLoadedWorkflows(). Si ce n'est pas le cas, vous pourriez utiliser un mauvais flux de travail InstanceId ou peut-être avoir plusieurs runtimes de workflow et en utiliser un autre à partir de l'endroit où vous avez démarré le workflow. – Maurice
Mon tableau InstanceState est vide. Cela signifie qu'aucun travail n'est persistant. Comment puis-je m'assurer qu'une instance est enregistrée dans la base de données par le service de persistance? – ksa