J'utilise la version bêta 2 de Visual Studio 2010 pour commencer à apprendre à utiliser WF4 et j'ai rencontré un problème de persistance. Dans le code ci-dessous, si j'utilise la création commentée d'un objet WorkflowApplication, la persistance fonctionne correctement. Si j'utilise la création non commentée ci-dessous, où je passe un dictionnaire pour les arguments que je veux passer, alors la persistance se brise. Des idées pourquoi cela peut-être, et comment le réparer?Windows Workflow Foundation 4.0 et la persistance
List<Approver> approversRequired = new List<Approver>();
approversRequired.Add(new Approver("Dept Manager"));
approversRequired.Add(new Approver("Center Manager"));
Dictionary<String, Object> wfArguments = new Dictionary<string, object>();
wfArguments.Add("ApproversRequired", approversRequired);
//WorkflowApplication workflowApp = new WorkflowApplication(
// new WebCARSWorkflow());
WorkflowApplication workflowApp = new WorkflowApplication(
new WebCARSWorkflow(), wfArguments);
InstanceStore instanceStore = new SqlWorkflowInstanceStore(
@"Data Source=.\SQLEXPRESS;Integrated Security=True;Initial Catalog=WorkflowInstanceStore");
InstanceView view = instanceStore.Execute(
instanceStore.CreateInstanceHandle(), new CreateWorkflowOwnerCommand(),
TimeSpan.FromSeconds(30));
instanceStore.DefaultInstanceOwner = view.InstanceOwner;
workflowApp.InstanceStore = instanceStore;
workflowApp.PersistableIdle = (waie) => PersistableIdleAction.Unload;
workflowApp.Run();
WorkflowGuid.Text = workflowApp.Id.ToString();
workflowApp.ResumeBookmark("RequestSubmitted", "Submitted");
J'ai la classe décorée avec [Serializable], mais ne sais pas DataContract, pouvez-vous me donner plus d'informations à ce sujet? –
DataContract est utilisé avec le WCF NetDataContractSerializer que WF4 utilise par défaut pour enregistrer les valeurs dans la base de données. Cela nécessite des types à b sérialisables. Il y a deux façons de le faire, l'utilisation facile de l'attribut Serializable où tous les champs privés sont sérialisés. L'autre option consiste à utiliser l'attribut DataContract qui donne un contrôle total sur ce qui doit être sérialisé et comment cela est fait. S'il existe une erreur de sérialisation, le rappel WorklfowApplication.Aborted vous donnera les détails. – Maurice