Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.041 c
15-1172673922
partizan
2007-02-28 17:45
2007.03.25
Компонента для работы с ФТП


9-1145910748
Sinistral
2006-04-25 00:32
2007.03.25
Работа с TCanvas


2-1172674149
ds120hp
2007-02-28 17:49
2007.03.25
Связь форм


4-1161174024
BiN
2006-10-18 16:20
2007.03.25
Перечисление системных объектных типов


15-1172509165
Сергей_.
2007-02-26 19:59
2007.03.25
phpBB club





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский