OperationContext.CurrentオブジェクトにアクセスするためにReceive/SendReplyToReceiveペアをラップしたOperationContextScopeアクティビティを備えたワークフロー4サービスがいくつかあります。OperationContextScopeアクティビティは、 http: //wf.codeplex.com/releases/view/48114にあるWF SecurityPackCTPからのものです。ホスティングにはWindowsServerAppFabricを使用しています。
さて、OperationContextScopeが非永続ゾーンを確立することを発見しました。OperationContextScopeは、Receiveで始まり、SendReplyToReceiveで終わるシーケンスをラップすることによって使用されるため、ワークフローがReceiveに到達したときに永続化を行うことはできません。
ワークフローがアイドル状態になるとすぐに持続し、受信アクティビティに達するとアイドル状態になるようにAppFabricを設定したため、これにより問題が発生します。永続化は行われません。また、60秒後にアイドル状態のアクティビティをアンロードするようにAppFabricを構成しました。したがって、Receiveで60秒間アイドリングした後、インスタンスはメモリから消去されますが、最初に永続化されることはありません。
私が理解している限り、インスタンスは最後の永続化ポイントから再開し、以前と同じ受信に到達するまで続行します。また、永続化に失敗し、60秒後にアンロードし、最後に永続化されたポイントから再開します。
私には、OperationContextScopeアクティビティには設計上の欠陥があるように見えます。これは、インスタンスの自動永続化とアンロードが適切に行われないようにするためです。または、アクティビティを間違った方法で使用していますか?