Состояние гонки, вызванное курсорами, сохраняется во временных файлах - возможно ли это? - PullRequest
0 голосов
/ 28 марта 2012

Я устраняю проблему с приложением Visual Fox Pro (созданным на основе среды Visual Fox Express), которая, как я подозреваю, вызвана состоянием гонки. Приложение размещается на сервере Citrix XenApp, и при определенных условиях данные, отображаемые в определенной форме, представляются неверными и изменяются на что-то отличное от того, что вводит пользователь.

В рассматриваемой форме отображается список записей, возвращаемых по запросу в базе данных SQL Server на основе определенной информации, введенной пользователем.

Если это то, что происходит, я подозреваю, что последовательность событий примерно такая:

1) Пользователь 1 вводит данные и заставляет форму отображать сетку данных результаты возвращены из базы данных.

2) Пользователь 2 открывает одну и ту же форму в другом сеансе Citrix и вводит данные вызывая форму для отображения сетки данных результатов, возвращаемых из базы данных. Этот курсор сохраняется на диск и перезаписывается, или как-то конфликтует с курсором пользователя 1 для этой формы.

3) Некоторые механизмы курсора FoxPro на экземпляре пользователя 1 видят измененные данные в курсоре (от пользователя 2) и обновляет экран данными из курсор.

Я не знаю много о том, как работает FoxPro, но из того, что я понимаю, в некоторых случаях курсор будет сохранен во временном файле. На нашем сервере приложений Citrix эта временная папка может быть общей для 10-50 пользователей. Я ищу информацию о том, является ли состояние гонки, вызванное курсором, записанным в файл во временной папке, чем-то возможным, чтобы я мог продолжить поиск по этому пути или окончательно исключить его.

Я знаю, что есть способы сделать так, чтобы временные файлы FoxPro записывались в разные папки для каждого пользователя, и я работаю над внесением изменений, чтобы сделать это, но я хотел бы узнать, видел ли кто-нибудь еще похожая проблема или считает, что то, что я подозреваю, на самом деле возможно.

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Я бы сказал, что маловероятно, что временные файлы здесь замешаны.Каждый созданный вами курсор использует другой временный файл;Я не вижу, как два пользователя, даже в ситуации типа Citrix, могли бы использовать один временный файл.

1 голос
/ 28 марта 2012

Это звучит странно, но да, Foxpro создает временные таблицы курсоров, которые он использует для отображения и запроса результатов, таких как локальный или удаленный доступ к данным.Однако при создании они создаются только для чтения или чтения-записи, но ТОЛЬКО для пользователя на соединение.Когда курсор пытается быть создан, он генерирует случайное имя файла для результатов и использует его в качестве курсора .dbf для представления пользователю.

МОЖЕТ ли это быть проблемой гонок?Я сомневаюсь, что, не зная специфики довольно старой платформы Visual FoxExpress, я не знаю, что / где вы бы сконфигурировали, чтобы она динамически использовала другое расположение временных файлов.Он должен идти по пути временных файлов переменных среды Windows.Таким образом, если пользователи соединения Citrix используют один и тот же пользователь / пароль для нескольких сеансов, да, он будет перемещаться в одно и то же место, но при попытке создать временный файл он не сможет получить эксклюзивный дескриптор и попытаться снова сследующее случайное имя файла.

...