![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MIDAS сервер на TRemouteDataModule. Как передать сооб-е клиентам? [D5, Win95/98, Win2k]
maxi © (2003-02-10 08:44:00)Такая проблема : Построил MIDAS сервер на TRemouteDataModule. На клиенте использую TSocketConnection (сервер построен на основе программы scktsrvr). Однако как передать сообщение от сервера к клиентам ?????
Пробовал такой вариант : на клиенте ставлю Automation Object (объект автоматизации), при запуске клиента создаю копию объекта через CoMyAutomationObject, беря тем самым его интерфейс IMyAutomationObject. Этот интерфейс передаю в качестве параметра (IUnknown или IDispatch) в интерфейс сервера. Тот его получает и вроде бы всё нормально, но при первом же вызове методов из интерфейса клиента возникает "Разрушительный сбой" и сервер заваливается.
Как сделать так что бы всё работало верно ???? или подскажите, что у меня неверно .... Буду очень признателен.
MrZeRo (2003-02-10 13:43:00) [1]А поискать в инете решение слабо?
Dan Miser подробно описал решение данной проблемы.
http://www.google.com/search?hl=ru&ie=windows-1251&q=MIDAS+CALLBACK
Klim Samgin (2003-02-10 13:05:00) [2]А в Delphi 7 эту тему пробивал кто-нибудь?
Digitman (2003-02-10 12:24:00) [3]
> Добавь еще - отдельный экземпляр rdm на сервере :-))
разумеется - добавлю)... экз-ры маршаллеров-то - разные для каждого коннекта)
Romkin (2003-02-10 12:15:00) [4]Добавь еще - отдельный экземпляр rdm на сервере :-))
Меня это никогда не тревожило, главное - простота и логика работы...
Digitman (2003-02-10 12:06:00) [5]
> Romkin
чего не понял ? )
> в котором и соединяйся с сервером
читай :
отдельный экз-р TSocketConnection = отдельный экз-р TClientSocket = отдельное гнездо и т.д.
Romkin (2003-02-10 12:02:00) [6]Бррр... Последнее вообще не понял :-))
Digitman (2003-02-10 11:34:00) [7]
> напиши на клиенте поток, в котором и соединяйся с сервером
> для асинхронных обратных вызовов
Может быть, в каких-то случаях это и оправдано ... но в общем случае выигрыш в упрощении таким способом транспортной логики сводится к проигрышу в использовании доп.сет.ресурсов из-за необходимости создания отдельной вирт.петли коннекта с партнером
Romkin (2003-02-10 11:22:00) [8]Поток есть... Переписывать, потом отлаживать, да еще и мультипоточность...
Все там правильно сделано - клиент как правило на одном потоке, и нафиг мне не нать ответ от сервера в другом потоке...
Я ж говорю - напиши на клиенте поток, в котором и соединяйся с сервером для асинхронных обратных вызовов. Быстро и сердито.
Digitman (2003-02-10 11:10:00) [9]
> Romkin
Да есть там транспортный поток-то ) ... см. TTransportThread
Только толку-то от него(... тр.события этот поток все равно синхронизирует с осн.потоком... так что без переделки TSocketConnection тоже не обойтись
Romkin (2003-02-10 11:03:00) [10]2Digitman
Ну понятно - хочешь асинхронности - реализуй поток на клиенте, а то что получается? ждем одно, получаем другое..
Достаточно организовать поток, и в нем соединение - все будет асинхронно.
2Соловьев: "Разрушительный сбой" чаще всего возникает из-за передачи интерфейсов между потоками без маршалинга, что недопустимо.
Соловьев (2003-02-10 10:47:00) [11]С делал обмен между сервером и клиентом. Тоже намучался с "Разрушительным сбоем". Опиши конкретно что ты хочешь, а то я что-то не понял :)
Digitman (2003-02-10 10:43:00) [12]www.rsdn.ru
RSDN = Russian Software Developer"s Network... вроде бы так)
все там замечательно, только ни о какой асинхронности обр.вызовов речи не идет
иными словами, если клиент находится в состоянии ожидания результата прямого вызова (например, вызов, в контексте которого на серв.стороне выполняется длительный запрос к СУБД), то до момента получения результата ни на какие события, связанные с обр.вызовом, клиент реагировать не имеет возможности, ибо обработка транспортных событий реализована последовательно
yn (2003-02-10 09:58:00) [13]wer
Klim Samgin (2003-02-10 09:48:00) [14]Что-то ссылка www.rdsn.ru не работает. Не ошибся ли ты, A2?
А2 (2003-02-10 09:28:00) [15]Это можно сделать, посмотрите журнал RSDN #2"2002 или на их сайте www.rdsn.ru, статья "Обратные вызовы в MIDAS через TSocketConnection". Там очень подробно описано.
Digitman (2003-02-10 08:55:00) [16]BSS не "умеет" выполнять асинхронные обратные вызовы клиента.
Без серьезной переделки BSS никак не обойтись