У меня есть несколько служб рабочего процесса 4 с активностью OperationContextScope, обернутой вокруг пар Receive / SendReplyToReceive, чтобы получить доступ к объекту OperationContext.Current. Действие OperationContextScope взято из CTP пакета безопасности WF по адресу http://wf.codeplex.com/releases/view/48114. Я использую Windows Server AppFabric для хостинга.
Я только что обнаружил, что OperationContextScope устанавливает зону непостоянства. Поскольку OperationContextScope используется путем обертывания последовательности, начинающейся с Receive и заканчивающейся SendReplyToReceive, сохранение не может иметь место в то время, когда рабочий процесс достигает Receive.
Это вызывает проблему, поскольку я настроил AppFabric для немедленного сохранения, когда рабочий процесс становится неактивным, и он становится неактивным, когда достигает действия приема. Упорство не происходит. Я также настроил AppFabric для выгрузки простоя через 60 секунд. Итак, после 60 секунд простоя на приеме мой экземпляр стирается из памяти, но без сохранения.
Насколько я понимаю, экземпляр затем возобновит работу с последней точки устойчивости и продолжит работу, пока не достигнет того же значения Receive, что и раньше. И снова он не сможет сохраниться, выгрузится через 60 секунд, возобновит работу с последней сохраненной точки и так далее.
Мне кажется, что у действия OperationContextScope есть недостаток дизайна, так как он предотвращает автоматическое сохранение и выгрузку экземпляров, которые должны происходить должным образом. Или я неправильно использую действие?