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

Вниз

MIDAS сервер на TRemouteDataModule. Как передать сооб-е клиентам?   Найти похожие ветки 

 
maxi   (2003-02-10 08:44) [0]

Такая проблема : Построил MIDAS сервер на TRemouteDataModule. На клиенте использую TSocketConnection (сервер построен на основе программы scktsrvr). Однако как передать сообщение от сервера к клиентам ?????
Пробовал такой вариант : на клиенте ставлю Automation Object (объект автоматизации), при запуске клиента создаю копию объекта через CoMyAutomationObject, беря тем самым его интерфейс IMyAutomationObject. Этот интерфейс передаю в качестве параметра (IUnknown или IDispatch) в интерфейс сервера. Тот его получает и вроде бы всё нормально, но при первом же вызове методов из интерфейса клиента возникает "Разрушительный сбой" и сервер заваливается.
Как сделать так что бы всё работало верно ???? или подскажите, что у меня неверно .... Буду очень признателен.


 
Digitman   (2003-02-10 08:55) [1]

BSS не "умеет" выполнять асинхронные обратные вызовы клиента.
Без серьезной переделки BSS никак не обойтись


 
А2   (2003-02-10 09:28) [2]

Это можно сделать, посмотрите журнал RSDN #2"2002 или на их сайте www.rdsn.ru, статья "Обратные вызовы в MIDAS через TSocketConnection". Там очень подробно описано.


 
Klim Samgin   (2003-02-10 09:48) [3]

Что-то ссылка www.rdsn.ru не работает. Не ошибся ли ты, A2?


 
yn   (2003-02-10 09:58) [4]

wer


 
Digitman   (2003-02-10 10:43) [5]

www.rsdn.ru

RSDN = Russian Software Developer"s Network... вроде бы так)

все там замечательно, только ни о какой асинхронности обр.вызовов речи не идет

иными словами, если клиент находится в состоянии ожидания результата прямого вызова (например, вызов, в контексте которого на серв.стороне выполняется длительный запрос к СУБД), то до момента получения результата ни на какие события, связанные с обр.вызовом, клиент реагировать не имеет возможности, ибо обработка транспортных событий реализована последовательно


 
Соловьев   (2003-02-10 10:47) [6]

С делал обмен между сервером и клиентом. Тоже намучался с "Разрушительным сбоем". Опиши конкретно что ты хочешь, а то я что-то не понял :)


 
Romkin   (2003-02-10 11:03) [7]

2Digitman
Ну понятно - хочешь асинхронности - реализуй поток на клиенте, а то что получается? ждем одно, получаем другое..
Достаточно организовать поток, и в нем соединение - все будет асинхронно.
2Соловьев: "Разрушительный сбой" чаще всего возникает из-за передачи интерфейсов между потоками без маршалинга, что недопустимо.


 
Digitman   (2003-02-10 11:10) [8]


> Romkin


Да есть там транспортный поток-то ) ... см. TTransportThread
Только толку-то от него(... тр.события этот поток все равно синхронизирует с осн.потоком... так что без переделки TSocketConnection тоже не обойтись


 
Romkin   (2003-02-10 11:22) [9]

Поток есть... Переписывать, потом отлаживать, да еще и мультипоточность...
Все там правильно сделано - клиент как правило на одном потоке, и нафиг мне не нать ответ от сервера в другом потоке...
Я ж говорю - напиши на клиенте поток, в котором и соединяйся с сервером для асинхронных обратных вызовов. Быстро и сердито.


 
Digitman   (2003-02-10 11:34) [10]


> напиши на клиенте поток, в котором и соединяйся с сервером
> для асинхронных обратных вызовов


Может быть, в каких-то случаях это и оправдано ... но в общем случае выигрыш в упрощении таким способом транспортной логики сводится к проигрышу в использовании доп.сет.ресурсов из-за необходимости создания отдельной вирт.петли коннекта с партнером


 
Romkin   (2003-02-10 12:02) [11]

Бррр... Последнее вообще не понял :-))


 
Digitman   (2003-02-10 12:06) [12]


> Romkin


чего не понял ? )


> в котором и соединяйся с сервером


читай :
отдельный экз-р TSocketConnection = отдельный экз-р TClientSocket = отдельное гнездо и т.д.


 
Romkin   (2003-02-10 12:15) [13]

Добавь еще - отдельный экземпляр rdm на сервере :-))
Меня это никогда не тревожило, главное - простота и логика работы...


 
Digitman   (2003-02-10 12:24) [14]


> Добавь еще - отдельный экземпляр rdm на сервере :-))


разумеется - добавлю)... экз-ры маршаллеров-то - разные для каждого коннекта)



 
Klim Samgin   (2003-02-10 13:05) [15]

А в Delphi 7 эту тему пробивал кто-нибудь?


 
MrZeRo   (2003-02-10 13:43) [16]

А поискать в инете решение слабо?
Dan Miser подробно описал решение данной проблемы.
http://www.google.com/search?hl=ru&ie=windows-1251&q=MIDAS+CALLBACK



Страницы: 1 вся ветка

Текущий архив: 2003.02.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
1-53085
bios
2003-02-05 00:20
2003.02.17
f:file; или типа того


1-52919
Bee
2003-02-08 20:52
2003.02.17
можно ли прочесть номер болванки CD-R?


1-53094
UserL
2003-02-07 07:12
2003.02.17
Как сделать чтоб в TStringGrid-е сначала подсвечивалась бы строка


1-52908
race1
2003-02-08 13:51
2003.02.17
видимость


1-52814
Zergling
2003-02-07 09:59
2003.02.17
Регистрация ActiveX





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