2012-03-28 1 views
0

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

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

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

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

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

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

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

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

ответ

1

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

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

1

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