Форум: "Базы";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
ВнизМожно ли передать ADOConnection в другой процесс? Найти похожие ветки
← →
WondeRu © (2006-12-26 17:09) [0]Создаем ADOConnection в одном процессе, а хоти его же пользовать в другом. Можно ли передать ADOConnection в другой процесс посредством COM(DCOM)? В dll можно, ведь тоже самое адресное пространство.
← →
Ega23 © (2006-12-26 17:11) [1]А чем тебя ConnectionString не устраивает? Иначе рискуешь на коллизии пакетов нарваться.
← →
WondeRu © (2006-12-26 17:13) [2]Не меня, тут "теологический" спор. Я с тобой согласен, что ConnectionString лучше. Человек хочет один Connection на все его программы компа.
← →
Ega23 © (2006-12-26 17:33) [3]
> Человек хочет один Connection на все его программы компа.
Скажи человеку, что либо 1 коннект на один поток (не процесс!), либо коннект с блокировкой от других потоков.
← →
alex_*** © (2006-12-26 18:19) [4]ты же сам говоришь что др. адресное просторанство. Тогда передавать только Handle сессии самой ADO, но думаю из этого ничего не выйдет. В АДО.НЕТ даже в пределах потока коннект не передается, только строка соединения, а ты хочешь другому процессу. Изврат и куча гемора, даже если удастся, потому как надо будет синхронизить вызовы м-ду процессами. Будет гораздо сложнее чем строку передать
← →
MsGuns © (2006-12-26 21:51) [5]Можно. Но, как показывает практика, начинается резкое тормозилово ОС. Приложение прекрасно реагирует на клавиатуру и мышь, а вот все остальное... Даже после простого нажатия правой кнопки на рабочем столе всплывающее меню появляется через десятки секунд.
Правда, коннект в асинхронноом режиме ;)
← →
alex_*** © (2006-12-27 10:55) [6]А как можно?
← →
Note (2006-12-27 12:04) [7]2 Ega23:
> А чем тебя ConnectionString не устраивает? Иначе рискуешь на коллизии пакетов нарваться.
ConnectionString не устраивает по той причине, что программ, которым требуется доступ к СУБД на одном компе будет достаточно много (скажем 20). Oracle в бесплатной версии имеет ограничение на число коннектов – около 250. И того получаем около 12 машин в системе. Не хочу вдаваться в подробности – но это ОЧЕНЬ мало. Варианта два: либо трёхзвенка в чистом виде, либо раздавать всем ADOConnection
>Иначе рискуешь на коллизии пакетов нарваться
Здесь о чём речь? Какой коллизии каких пакетов? ADOConnection потокозащищён. Все запросы отправленные через него в РАЗНЫХ потоков выстраиваются в ОЧЕРЕДЬ, т.е. выполняются ПОСЛЕДОВАТЕЛЬНО
>cкажи человеку, что либо 1 коннект на один поток (не процесс!), либо коннект с блокировкой от других потоков.
Сказали =) См. пост выше.
2 alex_*** ©
>Тогда передавать только Handle сессии самой ADO, но думаю из этого ничего не выйдет
Правильно думаете. Поэтому передают в другой процесс не Hаndle, а указатель на интерфейс, получить его можно обратившись к свойству ConnectionObject класса TADOConnection. Другой процесс (клиент) получив его будет работать с объектом который физически расположен на сервере!
2 MsGuns ©
> Но, как показывает практика, начинается резкое тормозилово ОС.
Это с каким кол-вом клиентов? Пробовал с 5-ю, работает, не тормозит.
← →
Ega23 © (2006-12-27 12:28) [8]
> Oracle в бесплатной версии имеет ограничение на число коннектов
> – около 250.
К серверу или к базе?
← →
alex_*** © (2006-12-27 12:49) [9]
> Правильно думаете. Поэтому передают в другой процесс не
> Hаndle, а указатель на интерфейс, получить его можно обратившись
> к свойству ConnectionObject класса TADOConnection. Другой
> процесс (клиент) получив его будет работать с объектом который
> физически расположен на сервере!
Надо думать это будет хитрый маршаллинг для DCOM . Прикольно. Кстати не будет ли здесь гемора с настройкой прав на DCOM. Не нашел АДО в DCOM config. Для какого объекта надо настраивать права?
← →
Note (2006-12-27 14:20) [10]2 Ega23 ©
к серверу СУБД, другими словами 250 - максимально число сессий. Каждый коннект - это сессия
2 alex_*** ©
> Надо думать это будет хитрый маршаллинг для DCOM .
ни какого хитрого маршалинга, ADO это COM ориентированная технология. Все интерфейсы уже имеются, достаточно просто передать интерфейс _Сonnection в другой процесс как IUnknown. Посмотрите исходники в Delphi в модуле ADOInt.pas - там есть описание.
> Кстати не будет ли здесь гемора с настройкой прав на DCOM. Не нашел > АДО в DCOM config. Для какого объекта надо настраивать права?
ADO это набор in-proc COM server"ов (основной файл msado15.dll). Его так настраивать не надо.
← →
isasa © (2006-12-27 15:07) [11]Note (27.12.06 14:20) [10]
к серверу СУБД, другими словами 250 - максимально число сессий. Каждый коннект - это сессия
Кстати о птичках.
Редко, но все-же наблюдал(ситуация не стабильная), при использовании одного ADOConnection в двух потоках, ошибку,
invalid object #<table name>(на MS SQL)
которая стабильно исчезала при использовании объектов ##.
Хотя здесь речь идет об ORACLE но вышеприведенное свидетельствует о том, что возможно создание дополнительной сессии, со всеми вытекающими ...
← →
alex_*** © (2006-12-27 16:08) [12]
> ни какого хитрого маршалинга, ADO это COM ориентированная
> технология. Все интерфейсы уже имеются, достаточно просто
> передать интерфейс _Сonnection в другой процесс как IUnknown.
> Посмотрите исходники в Delphi в модуле ADOInt.pas - там
> есть описание.
>
ну если COM, то уже маршаллинг, а если
> работать с объектом который физически расположен на сервере!
то это уже Outproc server. И в случае другой машины, то DCOM. Кто будет outproc сервером?
← →
AgainSlymRO (2006-12-29 06:37) [13]Сиглетон+Сервис + своя Iоболочка над Connection/dataset
← →
Ega23 © (2006-12-29 10:04) [14]В общем, ИМХО, это всё изврат. Заботит количество коннектов - пиши трёхзвенку, это более правильно будет.
← →
DiamondShark © (2006-12-29 15:20) [15]
> Заботит количество коннектов - пиши трёхзвенку, это более
> правильно будет.
Не будет.
Правильно будет не хапать постоянные подключения.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.04 c