背景: 我正在使用WF 4.0。我的网络应用和工作流程在一个农场(4台机器)上运行。从Web应用程序到工作流程的所有引用都使用“http:// localhost / ..”。使用SQL Server 2005将工作流持久性保留在一个数据库上。在Windows Server 2008上运行。
方案: ServerA创建新的工作流,并在到达包含接收活动作为其分支的Pick活动时完成处理。就在Pick活动之前,在数据库中设置了特定于应用程序的标志,以指示工作流已准备好收听下一个请求。在工作流持久性数据库中创建书签。 ServerB使用关联来恢复现有工作流,并继续处理,直到它到达下一个Pick活动。等等。
上面的场景在大多数情况下都能正常工作,除非ServerB尝试在设置“app-specific flag”后立即恢复工作流程。此标志是一个自定义操作,允许我通知用户他可以继续下一个操作。 但是,在大多数情况下,这将失败并出现InstanceLockedException。服务器显示有多次尝试,然后它尝试重定向到另一台服务器,然后再抛出另一个名为RedirectionException的异常。
目前我的WCF配置设置如下:
<sqlWorkflowInstanceStore connectionString="[conn str]"
instanceEncodingOption="None"
instanceCompletionAction="DeleteNothing"
instanceLockedExceptionAction="BasicRetry"
hostLockRenewalPeriod="00:00:30"
runnableInstancesDetectionPeriod="00:00:05" />
我不确定是否应该使用AgressiveRetry或更改更新和检测期间......或者我是否需要做一些完全不同的事情。 非常感谢您的意见。
答案 0 :(得分:1)
确保将timeToUnload和timeToPersist设置为00:00:00。这是负载均衡的wf主机的推荐设置。