我使用消息传递活动启动并保留了工作流程。 如果它们在几秒钟内发送,则Start initial命令和Stop final命令之间的相关性很好。 卸载工作流时会出现问题,因为以下Stop消息会引发以下FaultException:
如果未指定LoadWorkflowByInstanceKeyCommand.AssociateLookupKeyToInstanceId,则LookupInstanceKey必须已与实例关联,否则LoadWorkflowByInstanceKeyCommand将失败。因此,如果未设置AssociateLookupKeyToInstanceId,则在InstanceKeysToAssociate集合中指定LookupInstanceKey也无效
任何人都可以帮助我吗? 工作流内的变量是int和XDocument类型。 这是初始化WorkflowServiceHost的代码:
WorkflowServiceHost serviceHost = new WorkflowServiceHost(myWorkflow, new Uri(serviceUri));
ServiceDebugBehavior debug = serviceHost.Description.Behaviors.Find<ServiceDebugBehavior>();
if (debug == null)
{
debug = new ServiceDebugBehavior();
serviceHost.Description.Behaviors.Add(debug);
}
debug.IncludeExceptionDetailInFaults = true;
WorkflowIdleBehavior idle = serviceHost.Description.Behaviors.Find<WorkflowIdleBehavior>();
if (idle == null)
{
idle = new WorkflowIdleBehavior();
serviceHost.Description.Behaviors.Add(idle);
}
idle.TimeToPersist = TimeSpan.FromSeconds(2);
idle.TimeToUnload = TimeSpan.FromSeconds(10);
var behavior = new SqlWorkflowInstanceStoreBehavior
{
ConnectionString = ConfigurationManager.ConnectionStrings["WorkflowPersistence"].ConnectionString,
InstanceEncodingOption = InstanceEncodingOption.None,
InstanceCompletionAction = InstanceCompletionAction.DeleteAll,
InstanceLockedExceptionAction = InstanceLockedExceptionAction.BasicRetry,
HostLockRenewalPeriod = new TimeSpan(00, 00, 30),
RunnableInstancesDetectionPeriod = new TimeSpan(00, 00, 05)
};
serviceHost.Description.Behaviors.Add(behavior);
serviceHost.Open();
查看数据库,似乎永远不会暂停工作流程。
任何帮助表示赞赏, 谢谢
答案 0 :(得分:0)
不确定这里发生了什么,但听起来工作流程中使用的类型无法序列化并阻止工作流存储到磁盘。当您说“查看数据库时,似乎工作流程从未被暂停。”你真的意味着暂停吗?为什么您希望暂停工作流程?
如果您只将启动消息发送到工作流程并等待2秒,会发生什么?您是否在持久性数据库中获得了新记录?