Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли передать ADOConnection в другой процесс? [D7]


WondeRu ©   (2006-12-26 17:09:00) 

Создаем ADOConnection в одном процессе, а хоти его же пользовать в другом. Можно ли передать ADOConnection  в другой процесс посредством COM(DCOM)? В dll можно, ведь тоже самое адресное пространство.


DiamondShark   (2006-12-29 15:20:00) [1]


> Заботит количество коннектов - пиши трёхзвенку, это более
> правильно будет.

Не будет.

Правильно будет не хапать постоянные подключения.


Ega23   (2006-12-29 10:04:00) [2]

В общем, ИМХО, это всё изврат. Заботит количество коннектов - пиши трёхзвенку, это более правильно будет.


AgainSlymRO   (2006-12-29 06:37:00) [3]

Сиглетон+Сервис + своя Iоболочка над Connection/dataset


alex_***   (2006-12-27 16:08:00) [4]


> ни какого хитрого маршалинга, ADO это COM ориентированная
> технология. Все интерфейсы уже имеются, достаточно просто
> передать интерфейс _Сonnection в другой процесс как IUnknown.
>  Посмотрите исходники в Delphi в модуле ADOInt.pas - там
> есть описание.
>


ну если COM, то уже маршаллинг, а если

> работать с объектом который физически расположен на сервере!

то это уже Outproc server. И в случае другой машины, то DCOM. Кто будет outproc сервером?


isasa   (2006-12-27 15:07:00) [5]

Note   (27.12.06 14:20) [10]
к серверу СУБД, другими словами 250 - максимально число сессий. Каждый коннект - это сессия

Кстати о птичках.
Редко, но все-же наблюдал(ситуация не стабильная), при использовании одного ADOConnection в двух потоках, ошибку,
invalid object #<table name>(на MS SQL)
которая стабильно исчезала при использовании объектов ##.

Хотя здесь речь идет об ORACLE но вышеприведенное свидетельствует о том, что возможно создание дополнительной сессии, со всеми вытекающими ...


Note   (2006-12-27 14:20:00) [6]

2 Ega23 ©
к серверу СУБД, другими словами 250 - максимально число сессий. Каждый коннект - это сессия

2 alex_*** ©  
> Надо думать это будет хитрый маршаллинг для DCOM .
ни какого хитрого маршалинга, ADO это COM ориентированная технология. Все интерфейсы уже имеются, достаточно просто передать интерфейс _Сonnection в другой процесс как IUnknown. Посмотрите исходники в Delphi в модуле ADOInt.pas - там есть описание.

> Кстати не будет ли здесь гемора с настройкой прав на  DCOM. Не нашел > АДО в DCOM config. Для какого объекта надо настраивать права?
ADO это набор in-proc COM server'ов (основной файл msado15.dll). Его так настраивать не надо.


alex_***   (2006-12-27 12:49:00) [7]


> Правильно думаете. Поэтому передают в другой процесс не
> Hаndle, а указатель на интерфейс, получить его можно обратившись
> к свойству ConnectionObject класса TADOConnection. Другой
> процесс (клиент) получив его будет работать с объектом который
> физически расположен на сервере!

Надо думать это будет хитрый маршаллинг для DCOM . Прикольно. Кстати не будет ли здесь гемора с настройкой прав на  DCOM. Не нашел АДО в DCOM config. Для какого объекта надо настраивать права?


Ega23   (2006-12-27 12:28:00) [8]


> Oracle в бесплатной версии имеет ограничение на число коннектов
> – около 250.


К серверу или к базе?


Note   (2006-12-27 12:04:00) [9]

2 Ega23:
> А чем тебя ConnectionString не устраивает? Иначе рискуешь на коллизии пакетов нарваться.

ConnectionString не устраивает по той причине, что программ, которым требуется доступ к СУБД на одном компе будет достаточно много (скажем 20).  Oracle в бесплатной версии имеет ограничение на число коннектов – около 250. И того получаем около 12 машин в системе. Не хочу вдаваться в подробности – но это ОЧЕНЬ мало. Варианта два: либо трёхзвенка в  чистом виде, либо раздавать всем ADOConnection

>Иначе рискуешь на коллизии пакетов нарваться
Здесь о чём речь? Какой коллизии каких пакетов? ADOConnection потокозащищён. Все запросы отправленные через него в РАЗНЫХ потоков выстраиваются в ОЧЕРЕДЬ, т.е. выполняются ПОСЛЕДОВАТЕЛЬНО

>cкажи человеку, что либо 1 коннект на один поток (не процесс!), либо коннект с блокировкой от других потоков.
Сказали =) См. пост выше.

2 alex_*** ©
>Тогда передавать только Handle сессии самой ADO, но думаю из этого ничего не выйдет
Правильно думаете. Поэтому передают в другой процесс не Hаndle, а указатель на интерфейс, получить его можно обратившись к свойству ConnectionObject класса TADOConnection. Другой процесс (клиент) получив его будет работать с объектом который физически расположен на сервере!

2 MsGuns ©  
> Но, как показывает практика, начинается резкое тормозилово ОС.
Это с каким кол-вом клиентов? Пробовал с 5-ю, работает, не тормозит.


alex_***   (2006-12-27 10:55:00) [10]

А как можно?


MsGuns   (2006-12-26 21:51:00) [11]

Можно. Но, как показывает практика, начинается резкое тормозилово ОС. Приложение прекрасно реагирует на клавиатуру и мышь, а вот все остальное... Даже после простого нажатия правой кнопки на рабочем столе всплывающее меню появляется через десятки секунд.
Правда, коннект в асинхронноом режиме ;)


alex_***   (2006-12-26 18:19:00) [12]

ты же сам говоришь что др. адресное просторанство. Тогда передавать только Handle сессии самой ADO, но думаю из этого ничего не выйдет. В АДО.НЕТ даже в пределах потока коннект не передается, только строка соединения, а ты хочешь другому процессу. Изврат и куча гемора, даже если удастся, потому как надо будет синхронизить вызовы м-ду процессами. Будет гораздо сложнее чем строку передать


Ega23   (2006-12-26 17:33:00) [13]


> Человек хочет один Connection на все его программы компа.


Скажи человеку, что либо 1 коннект на один поток (не процесс!), либо коннект с блокировкой от других потоков.


WondeRu   (2006-12-26 17:13:00) [14]

Не меня, тут "теологический" спор. Я с тобой согласен, что ConnectionString лучше. Человек хочет один Connection на все его программы компа.


Ega23   (2006-12-26 17:11:00) [15]

А чем тебя ConnectionString не устраивает? Иначе рискуешь на коллизии пакетов нарваться.


Наверх

Титульная страница Поиск, карта сайта Написать письмо