0

我有一些工作流 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 活动似乎存在设计缺陷,因为它阻止了实例的自动持久性和卸载。还是我以错误的方式使用活动?

4

1 回答 1

0

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

因此,也许如果您可以描述更多关于发起呼叫的信息,我们可以对设计进行一些更改,以使这成为可能。例如,您可以将原始调用设为单向调用,并最终通过单独的端点回调调用者。

于 2012-04-16T15:40:34.790 回答