Проблема с открытием файла

sanch

Well-Known Member
17.07.2006
215
0
31
Харьков
#1
Доброго времени!
Есть код(агент) в котором получаю содержимое файла (NotesStream). Если этот агент вызываю другим агентом или по CORBA, то file.Bytes=0(возвращается пустой файл). Есть ли какие-нить ограничения? К примеру что Stream некорректно работает при "удаленном" вызове. Или может я что-то упустил?
Заранее благодарен за помощь!
 

sanch

Well-Known Member
17.07.2006
215
0
31
Харьков
#3
Нет, тут все норм. хотя, заметил что при удаленном вызове если использовать path типа С:\temp\dir\file.xml то файл не находится. А если с:\file.xml то все норм, в stream определяется кодировка и тд, но данных все равно 0.
ЗЫ If Not xml_in.Open(filename$) возвращает true, а данных 0 :)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#4
похоже на путаницу с путями и расположением файла (сервер/клиент)
на компе есть temp, на серваке - нет, вот и колбасит
 

sanch

Well-Known Member
17.07.2006
215
0
31
Харьков
#9
То есть не нашел файл и создал?

Если так то почему находит если вызывать "напрямую" ?
 

sanch

Well-Known Member
17.07.2006
215
0
31
Харьков
#13
точно!как то не подумал. написал сетевой путь все заработало.
Хорошо что это для теста. В норм режиме буду запихивать InputStream(java) в RT и с ним работать без NotesStream.
Спасибо за подсказку.
 

Anonimous

Well-Known Member
15.06.2012
117
0
#14
Можно спросить? Тоже тут с файлами )
Ситуация такая. Я делаю синхронизацию между лотусовой БД и Web. База лежит на сервере, назову его машина А.
Т.е. Лотус и Web обмениваются файлами xml, которые лежат в разделяемой папке FolderSh на машине с известным ip, назову ее машина Б.
В базе на сервере есть агент синхронизации LNSynchronizationFromWeb. Этот агент выполняется либо по расписанию, либо вызывается через браузер запросом URL.
Агент просто подхватывает файлы xml, которые лежат на машине Б, читает из них данные, по этим данным вносит изменения в документы Лотус. Информация из одного файла предназначена только для одного документа Лотус, в файле xml хранится UNID нужного документа.
Этот агент выполняется либо по расписанию - подхватывает все файлы в папке и осуществляет массовую синхронизацию.
Либо выполняет единичную синхронизацию посредством его вызова через запрос в браузере. Например, для файла test. Имя файла передается как параметр, этот файл берется из разделяемой папке - и идет единичная обработка

http://ip сервера/БД/LNSynchronizationFromWeb?OpenAgent&test

Если пустить массовую синхронизацию, то все нормально.
Вот у меня вопрос по доступу к файлам в случае единичной синхронизации.
На машине Б Лотус не стоит. А Лотус не любит выходить за границы своего каталога, NotesStream не хочет открывать файлы в таком случае. Значит, надо будет клиент Лотус ставить на машине Б, чтоб в папку Data кинуть разделяемую папку FolderSh с файлами?
Или к файлам как-то можно сетевое имя прописать?

Я прописываю сетевой путь к папке, указанный в ее свойствах на вкладке "Доступ", но вот при вызове

stDirLoad$ = {Сетевой путь к папке на вкладке "Доступ"} & "*.*"
stFName$ = Dir$(stDirLoad$, 0)

в log пишет ошибку, что директория с таким сетевым именем не найдена.

Буду очень благодарен за любой совет )
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#15
хм... на самом деле можно подрубиться к сетевому пути.
Попробуйте подключить ту папку как сетевой диск и обращаться через букву диска. На сервере.
Вот еще есть почти профильный вопрос, только там сохранение:
http://codeby.net/ipb.html?s=&sh...st&p=220451

Однако я не силен с web вызовом агентов и особенностей, возможно агент отрабатывает не на сервере...
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#16
юзер систем - может и не будет нормально работать с сетевыми ресурсами, ведь оно локальный юзер...
можно:
- пущать домину под доменной учеткой
- сделать одноранговую шару на удаленном сервере (не доменную) и завести там локального юзера (соответ домине)
- соединяться по имени/паролю зашитому в агент, к шаре (вариант неоднозначный)

Добавлено: а ваще, для сервисных домины нужд юзать виндовые шары - это камасутра какая-то, есть FTP, SSH...
кот. быстрее/секьюрнее SMB
 

rinsk

Well-Known Member
Lotus team
12.11.2009
895
84
Казань
#17
...
На машине Б Лотус не стоит. А Лотус не любит выходить за границы своего каталога, NotesStream не хочет открывать файлы в таком случае. Значит, надо будет клиент Лотус
...
Уже много-много раз возникает такого рода вопросы.
И NotesStram и input\write\dir замечательно работают с разного рода сетевыми шарами. Но только тогда, когда имеется представление о работе сетевых служб Windows:)

В Вашем случае в св-вах шары достаточно дать права той машины, на которой крутится Домино.
 

Anonimous

Well-Known Member
15.06.2012
117
0
#18
А я WNetAddConnection2 мучаю, не могу понять причины того, что оно возвращает 1312

Здесь нашел

http://www-10.lotus.com/ldd/46dom.nsf/55c3...e6?OpenDocument

В Вашем случае в св-вах шары достаточно дать права той машины, на которой крутится Домино.

А можно подробнее )) С свойствах шары на вкладке "Доступ" в Общем доступе стоит Все.

Я эту шару и как сетевой диск подключал к машине А (на которой сервер Лотус стоит)
Все равно по расписанию агент запускается от имени сервера - не находит.

Еще вот что. На машина А стоит XP, на Б - Windows 7.

Уже много-много раз возникает такого рода вопросы.

А где почитать? :(
 

Anonimous

Well-Known Member
15.06.2012
117
0
#20
УРА! Поехало!
Только не пойму, что же я такого сделал
А делал вот что:

1. У себя, на своей машине (не на машине А или Б) делал подключение к общему сетевому ресурсу в cmd

net use \\IP-адрес машины Б\C$ Пароль /user:Имя пользователя
Команда выполнилась успешно

2. На машине Б вошел в Панель управления - Центр управления сетями и общим доступом - Дополнительные параметры общего доступа и там сделал "Отключить общий доступ с парольной защитой". Теперь включил, правда

Но работает!
И еще в варианте использования WNetAddConnection2 (см. ссылочку выше)

на строке retCode = WNetAddConnection2(netRes, SYS_PASSWORD, SYS_USERNAME, 0)

SYS_USERNAME пишу так: "Имя домена\Логин пользователя"

Хотя даже вчерашняя версия агента, где WNetAddConnection2 для входа я не использую, тоже получает доступ к папкам.

Но вот общий доступ с парольной защитой в дополнительных параметрах Общего доступа я опять включил.
Не пойму, это, значит я подключил сетевой ресурс с помощью net use, и это все решило?