Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.03;
Скачать: CL | DM;

Вниз

Не могу из сервиса подключиться к 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.045 c
1-1153213762
Igor_thief
2006-07-18 13:09
2006.09.03
MainMenu в любой позиции формы


15-1151658614
TUser
2006-06-30 13:10
2006.09.03
Не наметить ли в Новосибирске ...


15-1154948534
Dimedrol
2006-08-07 15:02
2006.09.03
FullText поиск в MySQL


1-1153376353
S@[ShocK]
2006-07-20 10:19
2006.09.03
Проблема мерцания движущегося объекта Shape или Image


15-1154508050
Nic
2006-08-02 12:40
2006.09.03
МТС спятила?