让我们有一个工作流程,包括接收活动和延迟活动。 接收活动有CanCreateInstance = true
并且还提供了查询(消息)关联。 工作流托管在工作流服务 中,并在闲置时立即保存到数据库中。工作流程基础:从未完成延迟活动
WorkflowService service = new WorkflowService
{
Name = "MyWorkflow",
Body = new MyWorkflow(),
Endpoints =
{
new Endpoint
{
ServiceContractName = "IMyWorkflow",
AddressUri = new Uri("http://localhost:1234/MyWorkflow"),
Binding = new BasicHttpBinding()
}
}
};
WorkflowServiceHost host = new WorkflowServiceHost(service);
string conn = "Data Source=...;Initial Catalog=...";
host.DurableInstancingOptions.InstanceStore = new SqlWorkflowInstanceStore(conn);
host.Open();
现在我将消息发送到工作流 和运行时创建的第一个工作流实例。 相关密钥当然包含在消息中。 工作流继续延迟活动 并保存到数据库并卸载。
我们假设延迟时间足够长,然后我将发送下一条消息 ,并使用完全相同的相关密钥。怎么了? 这两种工作流程都不会从延迟中醒来,也从未完成。
我该怎么做? 为什么工作流运行时不能保护我免受此影响? 有什么办法可以拯救这两个工作流程实例吗?
感谢您的帮助!
好的,明白,谢谢!目前还不清楚我该如何拯救这些工作流程。我可以看到这两个工作流都保存在数据库中。有没有什么办法可以从代码中访问这些工作流程并做些事情,例如删除它们能否再次正确使用相关键? – 2010-06-04 10:13:05
或者,也许我的解决方案是不立即设置工作流程持久性,但延迟活动启动时。然后,工作流向我发送异常,但不会自行保留。你能确认我说得对吗? – 2010-06-04 10:27:16
消息关联与持久性无关。第一种是将消息路由到特定的工作流实例,第二种是关于保存状态并能够从内存中删除工作流。消息关联将与内存中的工作流实例完全一样。 – Maurice 2010-06-04 11:45:14