Я использую версию Visual Studio 2010 Beta 2, чтобы начать работу с WF4 и столкнулся с проблемой с постоянством. В приведенном ниже коде, если я использую закомментированное создание объекта WorkflowApplication, настойчивость работает нормально. Если я использую созданное без комментариев создание ниже, где я передаю словарь для аргументов, которые я хочу передать, то перерыв продолжительности. Любые идеи, почему это может быть, и как это исправить?Windows Workflow Foundation 4.0 и постоянство
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");
Я бы класса украшенного [Serializable], но не знаете о DataContract, вы можете дать мне больше информации об этом? –
DataContract используется с WCF NetDataContractSerializer, который WF4 использует по умолчанию для сохранения значений в базе данных. Для этого требуется, чтобы типы были сериализованы. Есть два способа сделать это: легко использовать атрибут Serializable, где все частные поля сериализуются. Другой вариант - использовать атрибут DataContract, который дает полный контроль над тем, что должно быть сериализовано и как это делается. Если произошла ошибка сериализации, обратный вызов WorklfowApplication.Aborted даст вам подробную информацию. – Maurice