Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.25;
Скачать: CL | DM;

Вниз

Можно ли передать 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.044 c
2-1172731272
roman_ln
2007-03-01 09:41
2007.03.25
Защита программ и данных с использованием электронных ключей.


2-1172905502
Roman_S
2007-03-03 10:05
2007.03.25
Необходимо очистить директорию


2-1172883049
arturich
2007-03-03 03:50
2007.03.25
Поиск в тексте


11-1142828301
Kealon
2006-03-20 07:18
2007.03.25
KeyPreview


2-1172813999
vegarulez
2007-03-02 08:39
2007.03.25
Как можно задать маску * при поиске в следующем случае...