有没有办法可以使用OperationContextScope而不会在闲置时搞乱持久性和卸载?

时间:2012-04-16 14:54:36

标签: .net workflow-foundation-4 appfabric

我有一些工作流4服务,其中OperationContextScope活动包裹在Receive / SendReplyToReceive对中,以访问OperationContext.Current对象。 OperationContextScope活动来自http://wf.codeplex.com/releases/view/48114的WF安全包CTP。我使用Windows Server AppFabric进行托管。

现在,我刚刚发现OperationContextScope建立了一个无持久区域。由于OperationContextScope是通过包装以Receive开头并以SendReplyToReceive结尾的序列来使用的,因此在工作流到达Receive时不会发生持久性。

这会导致问题,因为我已将AppFabric设置为在工作流空闲时立即保留,并在达到Receive活动时变为空闲。坚持不会发生。我还配置了AppFabric来在60秒后卸载空闲活动。因此,在接收器空闲60秒后,我的实例从内存中擦除,但是没有先被保留。

据我了解,实例将从最后一个持续时间点恢复并继续,直到它达到与之前相同的接收。再次,它将无法持续,60秒后卸载,从上一个持续点恢复,依此类推。

对我来说,似乎OperationContextScope活动有一个设计缺陷,因为它阻止了实例的自动持久性和卸载。或者我以错误的方式使用活动?

1 个答案:

答案 0 :(得分:0)

问题是OperationContextScope正在为您提供来自正在进行的环境WCF调用的数据。这个调用本身并不像工作流程那样神奇地进入睡眠和恢复状态。在该呼叫的另一端有人等待响应,并且通常是某种类型的网络连接,当工作流终于醒来时无法神奇地重新建立。

所以,也许如果你能描述一下有关原始呼叫的更多信息,我们可以规定一些设计的变化,以使其成为可能。例如,您可以将原始呼叫设置为单向呼叫,并最终通过单独的端点回拨给呼叫者。