Если позволите, подниму тему.
С описанным в начале темы сообщением, когда на сервере вызывается класс с RunOn=Client и в результате получаем ошибку, вроде все понятно.
Но недавно столкнулся с интересным моментом:
имеется некий класс с RunOn=Server;
в одном из его методов вызывается метод Global::fileNameNext(), при этом класс Global имеет RunOn=Called from, а метод Global::fileNameNext() объявлен следующим образом - static client server Filename fileNameNext(Filename _filename);
однако в методе Global::fileNameNext() используется метод WinAPI::fileExists(), который в свою очередь является клиентским (RunOn=Client у класса WinAPI и модификатор client у метода fileExists()).
Для начала вопрос: как вы думаете, как будет работать такая связка при обработке файлов на сервере (пути - сетевые).
Я бы наверное сразу сказал, результатом будет ошибка "Олицетворенный на сервере (RunAs) сеанс попытался вызвать метод, который доступен только на клиенте...", но как показала практика - все работало нормально. Класс работал в пакете, проверялось наличие файлов, получались новые имена, файлы создавались/перемещались с новыми именами...
Но, тут самое интересное! Все работало до поры, до времени.
В один прекрасный момент таки появилась вышеописанная ошибка! Причем только на одном файле из нескольких сотен. Причем именно на этом файле она повторялась. Причем на всех других файлах она не проявлялась. Со временем выявился еще один такой уникальный файлик. С тех пор их только два.
Честно, говоря полез проверять места выполнения всей цепочки только после того как получил ошибку. До этого просто не обратил внимание на наличие в fileNameNext() метода WinAPI::fileExists(). И даже после этого не стал сразу исправлять, а некоторое время последил за работой класса - ошибка больше не проявлялась на новых файлах и стабильно повторялась на двух файлах, на которых появлялась и ранее.
Может кто-нибудь объяснить такое поведение Аксапты?
P.S.: Метод Global::fileNameNext() ни кем не правился - живет на sys-слое. WinAPI::fileExists() - также. Kernel version: 5.0.1500.4570, Application version: 5.0.1500.3761
|