我有一个工作流已启动并持续使用消息传递活动。 如果它们在几秒钟内发送,Start start命令和Stop final命令之间的关联就可以正常工作。当工作流卸载 问题开始,因为下面的停止消息引发以下的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();
望着数据库,它似乎是工作流从未暂停过。
任何帮助表示赞赏, 谢谢
对于挂起,我的意思是它进入RunnableInstancesTable表,并且IsSuspended的值在InstancesTable表中设置为1。 可以将工作流程序列化,因为如果我添加延迟,它会正确挂起。 问题是在WorkflowIdleBehavior.TimeToUnload过去之后,工作流程不会暂停,并且对Stop操作的调用将引发所述的错误。如果在TimeToUnload超时之前发送停止操作,则不会引发该错误。 这是一个长时间运行的工作流程。 – fra 2011-01-13 14:22:24