我有一些工作流 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 设置为在工作流空闲时立即持续存在,并且在它到达接收活动时变为空闲。坚持不发生。我还将 AppFabric 配置为在 60 秒后卸载空闲活动。因此,在 Receive 空闲 60 秒后,我的实例会从内存中擦除,但是没有先被持久化。
据我了解,该实例将从其最后一个持久点恢复并继续,直到它达到与以前相同的接收。再一次,它将无法持久化,在 60 秒后卸载,从最后一个持久化点恢复,等等。
对我来说,OperationContextScope 活动似乎存在设计缺陷,因为它阻止了实例的自动持久性和卸载。还是我以错误的方式使用活动?