Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1155627240
ronyn
2006-08-15 11:34
2006.09.03
Alias


6-1143485914
Jah182100Jah
2006-03-27 22:58
2006.09.03
Помогите пожалуйста с проверкой на наличие компа в сети


1-1153690420
Fantasy
2006-07-24 01:33
2006.09.03
многоязыковый интерфейс


3-1146930148
parovoZZ
2006-05-06 19:42
2006.09.03
Кодировка таблиц


15-1155158224
Алхимик
2006-08-10 01:17
2006.09.03
Подарок на день рождения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский