24.06.2024, 20:46 | #1 |
Участник
|
RunAs для клиентского класса
Добрый день
Есть класс , что выполняется на клиенте. Класс обрабатывает файлы. Для этого используется папка, к которой имеет доступ определенный пользователь. Мне нужно сделать корректирующий данные job, что испольует внутри этот класс. RunAs не работает на клиенте. Можно это как-то программно обойти? Спасибо Ax2009 |
|
25.06.2024, 11:05 | #2 |
Участник
|
Добрый день.
Вы, будучи админом, доступом к папке обладаете? Если нет: А. Запустите Аксапту из под учетной записи пользователя. Б. Или получите доступ к папке и перейдите к следующему алгоритму. Если да: 1. Не пускайте пользователя в систему; 2. В UserInfo замените SID целевого пользователя на свой, а у своего затрите; 3. Запустите джоб; 4. Верните как было. Последний раз редактировалось Товарищ ♂uatr; 25.06.2024 в 11:12. |
|
25.06.2024, 11:50 | #3 |
Участник
|
А Нет пароля для прямого доступа
Б Доступ к папаке только у сервера либо юзеров, у кот доспут дан. |
|
25.06.2024, 12:27 | #4 |
Участник
|
А возможно ли textBuffer передать между клиентом и сервером?
|
|
25.06.2024, 14:55 | #5 |
Участник
|
Как байтовый поток можете трафик "гонять". Обычно для таких целей контейнеры используют (RunBase.dialog и его pack/unpack ярый тому пример).
Можете в БД вставить записи считанные сервером из целевого каталога и клиентом считать. Последний раз редактировалось Товарищ ♂uatr; 25.06.2024 в 15:03. |
|
|
За это сообщение автора поблагодарили: Lankey (1). |
25.06.2024, 18:26 | #6 |
Участник
|
Спасибо! интересный вариант
1) Какое ограничение на размер контейнера в таком случае? 2) TextBuffer почему нельзя использовать? 3) Можно через binData? Или его надо в контейнер упаковывать, а так просто не передать? Вариант с БД,наверное, самый надежный, но немного тяжеловесно получится. Хотелось бы только job-ом обойтись для этой задачи Последний раз редактировалось Lankey; 25.06.2024 в 18:32. |
|
25.06.2024, 20:22 | #7 |
Участник
|
Если доступ у сервера, то в чем проблема выполнить запуск на стороне сервера?
Не сам джоб, разумеется, а класс, который он использует? 1. Не в курсе, в dax2009 уже был статический метод ClassFactory::makeObjectOnServer()? Т.е. просто создать экземпляр класса на стороне сервера 2. Создать класс-посредник с единственным статическим методом с опцией Server внутри которого и запускать нужный класс. И из джоба запускать этот статический метод 3. Если возможно, такой статический метод с опцией Server можно создать на самом целевом классе
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: Товарищ ♂uatr (4). |
25.06.2024, 20:33 | #8 |
Участник
|
1. На ум не приходят какие-либо ограничения при передаче контейнеров между клиентом и сервером, в отличии от строк - их лимит установлен конфигурацией приложения (как клиента, так и сервера по отдельности).
2. Это класс, он создаётся либо на клиенте, либо на сервере, ну будете через RPC на клиенте "дёргать" экземпляр серверного объекта, результат его работы всё равно будет (value) строка, а при больших объемах данных она упирается в п.1. 3. BinData как раз и работает с типом данных "контейнер" и это класс, тоже самое, что и п.2. Только результат его работы - контейнер. https://learn.microsoft.com/en-us/do...ass-and-struct Ощущение, что не теми средствами решаете проблему. Логично просто написать джоб который скопирует целевые файлы от имени сервера в промежуточную папку к которому обладаете доступом. А далее просто запустите корректирующий джоб aka целевой пользователь. |
|
28.06.2024, 20:40 | #9 |
Участник
|
Прошу прощения за глупый, наверное, вопрос, но какая разница между "гонять байтовый поток" и "передавать строку", если все - байты. Т.е, почему есть лимит в конфигурации только на размер передаваемой строки?
Спасибо за ссылку на передачу по значению и по ссылке. Что я не очень понимаю : в чем сложность передать даже класс между клиентом и сервером по значению (если его члены -простые типы). Можно же ,мне кажется, SysPackable сделать(то есть , статус запаковать в контейнер и передать). заимплементировать. И если это так, то почему в тот же textBuffer не добавили pack/unpack для удобства? Наверное, вопрос риторический, но вдргу есть объяснение тому, что не стараются все делать упаковываемым и передаваемым для оптимизации перформанса (=чтобы не дергать объект на другом tier) |
|
01.07.2024, 10:37 | #10 |
Участник
|
В том и дело, что строка не простой тип данных в отличии от контейнера. Почитайте чем достигается идемпотентность строки.
|
|
01.07.2024, 12:51 | #11 |
Administrator
|
Цитата:
Сообщение от Lankey
Что я не очень понимаю : в чем сложность передать даже класс между клиентом и сервером по значению (если его члены -простые типы). Можно же ,мне кажется, SysPackable сделать(то есть , статус запаковать в контейнер и передать). заимплементировать. И если это так, то почему в тот же textBuffer не добавили pack/unpack для удобства? Наверное, вопрос риторический, но вдргу есть объяснение тому, что не стараются все делать упаковываемым и передаваемым для оптимизации перформанса (=чтобы не дергать объект на другом tier)
2. Однако есть ограничение на размер передаваемого буфера между клиентом и сервером. И классы, которые работают с большими массивами данных (тот же TextBuffer) не имеет методы pack / unpack, потому что там может оказаться неконтролируемый размер буфера. Конечно также можно сказать и про Set / Map / List, однако... вот у меня есть пример из жизни, когда слишком большой курсор я сохранял в классе RecordSortedList и ... АОС падал. В общем - в любом случае - нужно принять как данность - невозможность передавать огромные размеры данных между клиентом и сервером АХ + невозможность создавать копию объекта на другом tier на уровне ядра (т.е. только вручную на Х++)
__________________
Возможно сделать все. Вопрос времени |
|