2010-01-07 7 views
0

Я использую версию 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"); 

ответ

3

Является ли Утверждающим вас в качестве параметра, украшенного атрибутом Serializable или DataContract?

Вы можете увидеть persitence ошибок с помощью прерванного обратного вызова

  workflowApp.Aborted = e => Console.WriteLine(e.Reason); 
+0

Я бы класса украшенного [Serializable], но не знаете о DataContract, вы можете дать мне больше информации об этом? –

+0

DataContract используется с WCF NetDataContractSerializer, который WF4 использует по умолчанию для сохранения значений в базе данных. Для этого требуется, чтобы типы были сериализованы. Есть два способа сделать это: легко использовать атрибут Serializable, где все частные поля сериализуются. Другой вариант - использовать атрибут DataContract, который дает полный контроль над тем, что должно быть сериализовано и как это делается. Если произошла ошибка сериализации, обратный вызов WorklfowApplication.Aborted даст вам подробную информацию. – Maurice

Смежные вопросы