Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Alexander Zhukov Member Откуда: Сообщений: 13 |
Программа написана на Delphi 2010. Используется ADO connection (обычное,которое в комплекте к Delphi идет). SQL Server 2005. Есть несколько приложений - довольно давно работают с этой БД - все ок. Возникла необходимость написать сервис, работающий с этими же данными. Так как все приложения построены по схеме - объекты с данными и подключение - отдельно, отображение и интерфейсы отдельно - то и вроде бы проблем никаких быть не должно.. по идее. Тот же компонент ADOConnection, который работает уже несколько лет (в тех же unit'ах), при запуске из-под сервиса выдал
Я уже и FAQ читал, и проверял открытость TCP/IP/Named pipes на сервере - все ок, но увы - не подключается. Пинг тоже ессно проходит отлично. Могу лишь добавить, что в design time ADOConnection компонент подключается к БД нормально, а сам сервис я запускаю от имени пользователя, имеющего права локального администратора на клиентской машине, и имеющего сетевые права, достаточные для подключения к серверу (и права локального админа на сервере тоже). В поле datasource в connectionstring, кроме самого адреса так же пробовал указывать и порт в явном виде (1433) - увы, облом. |
||
15 мар 13, 16:52 [14053994] Ответить | Цитировать Сообщить модератору |
Jovanny Member Откуда: Сообщений: 1196 |
А приложение работает в домене? |
15 мар 13, 17:44 [14054413] Ответить | Цитировать Сообщить модератору |
Alexander Zhukov Member Откуда: Сообщений: 13 |
Да, в домене. |
15 мар 13, 17:46 [14054429] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
Alexander Zhukov, Посмотрите логи сервера. |
16 мар 13, 02:43 [14056384] Ответить | Цитировать Сообщить модератору |
Alexander Zhukov Member Откуда: Сообщений: 13 |
В логах чисто :( т.е. попыток подключения не замечено (это логи SQL сервера). |
18 мар 13, 08:53 [14060938] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
1. И под какими учетными данными запущен твой сервис? 2. Разреши сервису "взаимодействовать с десктопом" и запусти-посмотри чо будет. 3. Запусти под "учетными данными сервиса" отладчик Delphi. |
||
18 мар 13, 08:57 [14060954] Ответить | Цитировать Сообщить модератору |
Alexander Zhukov Member Откуда: Сообщений: 13 |
1.Сервис запускаю под своей учеткой (т.е. под доменной); 2.Счас попробую. 3.В смысле? Я и так сижу с этими же учетными данными - это моя учетка. |
||||
18 мар 13, 09:23 [14061011] Ответить | Цитировать Сообщить модератору |
Alexander Zhukov Member Откуда: Сообщений: 13 |
2. Результат абсолютно тот же.... |
||||
18 мар 13, 10:15 [14061188] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Ошибка у вас не сиквельная, а клиентская. Так что ищите проблему у себя локально. 1. Убедитесь, что локальный фаервол не блокирует доступ в сеть для сервиса. 2. Подключитесь отладчиком к процессу сервиса и посмотрите реальную строку подключения. |
||
18 мар 13, 10:53 [14061337] Ответить | Цитировать Сообщить модератору |
Александр Спелицин Member Откуда: Из ближайшего подмосковья. Сообщений: 2513 |
CoInitialize вызывали? Попробуйте изменить Вашу программу, чтобы ее можно было вызывать и как службу и как обычное приложение. Если получится запустить как приложение, то проблемы в администрировании системы. Если ошибка осталась - проблемы с программой. |
18 мар 13, 11:03 [14061380] Ответить | Цитировать Сообщить модератору |
Alexander Zhukov Member Откуда: Сообщений: 13 |
1. Файрвол и брандмауер отключены. 2. В процессе (хотя строку я выдаю в LogMessage процелуре). |
||||
18 мар 13, 11:20 [14061456] Ответить | Цитировать Сообщить модератору |
Alexander Zhukov Member Откуда: Сообщений: 13 |
Эти же units в дельфи используются в нормальных приложениях. Всё работает на ура. (те же dfm с ADOConnection компонентами) и функции, которые их вызывают. Только входные данные (логин/пароль на sql сервер передаются, ну и сами адреса) приходят не от окна ввода пользователя, а считываются из реестра. |
||
18 мар 13, 11:24 [14061474] Ответить | Цитировать Сообщить модератору |
Jovanny Member Откуда: Сообщений: 1196 |
А если начать с элементарного? На клиентской машине войти под логином сервиса и в Management Studio подключиться к серверу? |
18 мар 13, 11:29 [14061498] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
|
||
18 мар 13, 11:37 [14061522] Ответить | Цитировать Сообщить модератору |
Alexander Zhukov Member Откуда: Сообщений: 13 |
Это на ура работает. |
||
18 мар 13, 11:49 [14061582] Ответить | Цитировать Сообщить модератору |
Alexander Zhukov Member Откуда: Сообщений: 13 |
Более того, сделал эксперимент - запустил сервис на самом сервере. С указанием в connectionstring "localhost" как DataSource. Результат тот же. |
18 мар 13, 11:51 [14061594] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
и все таки покажите реальный ADO шнгый коннекшин стринг... чет у вас савсем не чяисто Олтвите профайлером и покажите ,и сраните его с тем.который прописан в конфигах..чет у вас мутно все |
18 мар 13, 12:09 [14061669] Ответить | Цитировать Сообщить модератору |
Александр Спелицин Member Откуда: Из ближайшего подмосковья. Сообщений: 2513 |
Так вот "Нормальные" приложения делают многое сами, а в службах, dll, потоках это нужно делать явно. В обычном приложении используется объект TApplication, а в службе - TServiceApplication. TApplication автоматически вызывает CoInitialize только для основного потока приложения. Для других потоков его нужно вызывать явно. TServiceApplication вряд ли вызывает CoInitialize. К тому же там несколько потоков изначально!!! Еще раз. Измените Вашу службу так, чтобы она могла работать и как обычное запускаемое приложение. И добейтесь работы именно в этом режиме. |
||||
18 мар 13, 12:22 [14061775] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
|
||
18 мар 13, 12:28 [14061835] Ответить | Цитировать Сообщить модератору |
Luc Member Откуда: Москва Сообщений: 85 |
Создаёте на MS SQL локальное имя входа, присваиваете все необходимые права. Пробиваете эту учётку в ConnectionString. Или же пробивать в сервис свои учётные данные (Но при смене пароля придётся пробивать снова). |
18 мар 13, 13:47 [14062377] Ответить | Цитировать Сообщить модератору |
Alexander Zhukov Member Откуда: Сообщений: 13 |
да, надо было - чегой-то стормозил Provider=SQLOLEDB;Password=xxxxxx;Persist Security Info=True;User ID=yyyyyy;Initial Catalog=serv_alias.domain.ru;Data Source=db_name,1433;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False |
||
18 мар 13, 14:20 [14062593] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
...Initial Catalog=db_name;Data Source=serv_alias,1433;... может так? |
18 мар 13, 14:22 [14062611] Ответить | Цитировать Сообщить модератору |
Alexander Zhukov Member Откуда: Сообщений: 13 |
Я видимо не совсем понимаю как именно изменить сервис, чтобы он работал как обычное приложение? Он же TService, а надо TApplication. А если имелось в виду чтобы те же куски кода работали - то да, у меня общие юниты для приложения и для сервиса. Физически одни и те же файлы. |
||||
18 мар 13, 14:24 [14062627] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
Alexander Zhukov, Conn String |
18 мар 13, 14:25 [14062634] Ответить | Цитировать Сообщить модератору |
Alexander Zhukov Member Откуда: Сообщений: 13 |
Пробовал. Изначально (в приложении) было именно так. Но оно не заработало - поэтому по совету сисадминов - вставил туда полный алиас. Правда без особого успеха. |
||
18 мар 13, 14:26 [14062638] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |