Форум: "Базы";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
ВнизНе могу из сервиса подключиться к IB Найти похожие ветки
← →
novill © (2006-06-23 10:54) [0]Использую IBX. В дизайнтайме все подключается, а при запуске получаю ошибку unavailable database
← →
Desdechado © (2006-06-23 10:59) [1]Может, твой сервис стартует до IB ?
Строку подключения в студию
← →
PEAKTOP © (2006-06-23 11:04) [2]Предположение №2.
Может сервайс использует локальное подключение ? т.е. строка подключения "D:\database\.....\mybase.ib"
Если так, то не проканает.
Надо использовать
"127.0.0.1:D:\database\.....\mybase.ib" в строке подключения.
← →
novill © (2006-06-23 11:19) [3]Сервис стартую руками, когда всё уже запущено.
Создание объектовtry
IBDB:=TIBDatabase.Create(nil);
IBTr:=TIBTransaction.Create(nil);
IBTr.DefaultDatabase:=IBDB;
IBQ:=TIBQuery.Create(nil);
IBQ.Transaction:=IBTr;
IBQ.Database:=IBDB;
except
on e:exception do MyExceptCatcher(e);
end;
ПодключениеLoadconfig; //загрузка переменных
IBDB.Connected:=False;
if IPServerData="local"
then IBDB.DatabaseName:=FileNameData
else IBDB.DatabaseName:=IPServerData+":"+FileNameData;
IBDB.Params.Clear;
IBDB.Params.Add("user_name="+UserData);
IBDB.Params.Add("password="+PasswordData);
IBDB.Params.Add("lc_ctype=WIN1251");
IBDB.LoginPrompt:=False;
IBDB.SQLDialect:=3;
IBDB.Connected:=true;
IBTr.Active:=true;
Что самое странное - в простом приложении этот код исправно работает.
← →
novill © (2006-06-23 11:20) [4]
> PEAKTOP ©
Почему так? пробую...
← →
Desdechado © (2006-06-23 11:40) [5]> Почему так?
Так надо, затем и просил показать строку подключения.
И вообще локальный протокол глючный, даже при обычной работе.
← →
novill © (2006-06-23 11:54) [6]Строчку подключения заменил, но проблема не ушла (
IBDB.DatabaseName:="127.0.0.1:"+FileNameData
← →
Desdechado © (2006-06-23 12:01) [7]Небось, if IPServerData="local" забыл убрать?
FileNameData - тут что?
← →
Sergey13 © (2006-06-23 12:04) [8]А не может это быть из-за того, что сервис запущенный от системной учетной записи не может с сетью работать? Если попрорбовать сервис авторизовано запустить?
← →
novill © (2006-06-23 12:12) [9]не забыл. В конфиге именно local стоит.
Такая строчка получается: 127.0.0.1:C:\my\work\databases\DOWNLOAD.GDB
Ошибка изменилась. Появляется ESockError с сообщением Connection Failed
Я вспомнил, что вроде у IB есть настойка принимать удаленные вызовы. Облазил настройки, но не нашел. Хотя с другой стороны эти же настройки в дизайн-тайме работают.
← →
Desdechado © (2006-06-23 12:16) [10]> В конфиге именно local стоит
Убери. Вообще забудь про локальный протокол, если только Embedded не используешь.
← →
Виталий Панасенко (2006-06-23 12:31) [11]
> if IPServerData="local"
> then IBDB.DatabaseName:=FileNameData
> else IBDB.DatabaseName:=IPServerData+":"+FileNameData;
>
похоже, условие истинно после
> Подключение
> Loadconfig; //загрузка переменных
и имеем проблему, описанную
> PEAKTOP © (23.06.06 11:04) [2]
> Предположение №2.
> Может сервайс использует локальное подключение ? т.е. строка
> подключения "D:\database\.....\mybase.ib"
> Если так, то не проканает.
>
> Надо использовать
> "127.0.0.1:D:\database\.....\mybase.ib" в строке подключения.
>
← →
novill © (2006-06-23 12:36) [12]
> Виталий Панасенко
Строчка подключения уже выглядит так:
127.0.0.1:C:\my\work\databases\DOWNLOAD.GDB
> Sergey13 ©
Я зашел в свойства свойства службы и задал "вход в системы в учетной записью" и задал админскую учетную запись. Вы это имели в виду? или есть ькакой-то другой сопсоб?
← →
Sergey13 © (2006-06-23 12:39) [13]2[12] novill © (23.06.06 12:36)
>Вы это имели в виду?
Да. И что? Заработало?
← →
novill © (2006-06-23 12:42) [14]ESockError
Connection Failed
← →
PEAKTOP © (2006-06-23 14:56) [15]Судя по всему - логгер ты пишешь. Когда-то давно тоже писал ...
1) разница у тебя в отладчике Delphi и в сервайсе из-за того, что
1.1.) в дизайн-тайме компоненты работают в режиме Application с дескриптором Delphi от имени пользователя, от которого запущена Delphi.
1.2) в ран-тайме отладчика (на F9) компоненты работают в режиме Application с дескриптором твоего exe-шника от имени пользователя, от которого запущена Delphi.
1.3) в "боевом" состоянии компоненты работают в режиме Service с дескриптором Service (а не Application) от имени пользователя, от которого стартует сервайс.
2) я запускал свой сервайс от имени system
3) в сервайсе забей на локальные протоколы !!!!! ставь сразу протокол TCP и путь в виде IBDataBase.DatabaseName := "127.0.0.1:" + StrDataBasePath;
Firebird - это сервайс, твоя прога - тоже, сервайсы между собой могут коннектиться только через сеть, даже если запущены на одной станции не имеющей сетевухи.
4) Никогда не используюй псевдонимов DNS, только IP-адреса. Был у меня случай, когда у заказчика центральный сервак назывался Server, который кроме сервера DB был еще шлюзом в Интернет к локалке провайдера, где тоже был компьютер с именем Server. Дык каждый раз при коннекте вылетало стандартное окошко "Давайте подрубимся к Инету ?"
5) проверь конфигурацию файерволла, а может ли твой сервайс коннектиться к кому либо и может ли Firebird принимать подключения не только локальные, но из сети.
6) у сервайса, скомпилинного на Delphi есть очень удобная фишка - это запуск exe-шника с параметром "-install", которая регистрирует сервайс в NT.
Было эксперементально замечено на Windows 2000 Adv Server(+SP2), что проинсталенные сервайс (файл exe) кэшируется, даже если не запушен.
Т.е. компилим сервайс на Delphi, копируем в другую папку, инсталлим, запускаем. Что-то не так - останавливаем сервайс, перекомпиливаем на Delphi, тупо заменяем проинсталленый сервайс (файл exe) в его папке на новый, запускаем - и ... работает старый сервайс, хотя его exe-шника и в помине уже нет.
Вывод: для сервайсов для отладки нужно каждый раз его сносить, а потом снова инсталлить.
← →
novill © (2006-06-23 15:19) [16]
> PEAKTOP ©
спасибо за подробное объяснение.
Сейчас заработало, разбираюсь "почему?".
А можно как-то сразу указать что сервис будет работатьот такой-то учетной записи? а еще лучше от имени "сетевой службы" (NetworkService) (NT AUTHORITY\NetworkService) только узнать какой у них пароль? (права админа на свой комп есть)
← →
PEAKTOP © (2006-06-23 20:48) [17]
> А можно как-то сразу указать что сервис будет работать от такой-то учетной записи?
В хэлпе посмотри свойства Service1.ServiceStartName и Servce1.Password.
> а еще лучше от имени "сетевой службы"
Зачем ? От систем досточно.
> (NetworkService) (NT AUTHORITY\NetworkService) только узнать какой у них пароль? (права админа на свой комп есть)
>
Выдрать пароль из защищенного хранилища (только с правами Админа или System). Только рассмотрение этого вопроса относится к ветке "Взлом" или "Написание троянов", а не "Базы".
И еще. в добавление к предыдущему посту. Если тебе нужно коннектиться к другому сервайсу (например, тому же Firebird), то тебе нужно быть уверенным, что этот сервайс уже стартовал. Добавление свойства Dependicies рекомендую не делать, т.к. ты юзаешь Interbase 7.5, а может возникнуть потребность использовать сервайс для страых IB 6.X, или Firebird. А exe-шник уже скомпилен. Лучше зашить задержку скажем в минуту от старта сервайса до его коннекта к SQL-серверу.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.042 c