Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Вниз

Отладка DCOM-сервера   Найти похожие ветки 

 
Сатир   (2005-12-24 18:14) [0]

Ув. Мастера!
Подскажите, как отладить сабж. Он скомпилирован в экзешник и зарегистрирован в системе. Когда запускаю его под средой и запускаю клиент, то в памяти создаётся другая копия сервера, а запущенная под средой не принимает запросы от клиента. И как можно отлаживать клиент и сервер одновременно.
Заранее благодарен за помощь


 
имя   (2005-12-24 19:09) [1]

Удалено модератором


 
Сатир   (2005-12-24 19:29) [2]

но ведь многие программисты по выходным работают, а по будням отдыхают


 
Набережных С. ©   (2005-12-24 22:03) [3]

Группа проектов.


 
Сатир   (2005-12-25 18:17) [4]


> Группа проектов.

а можно поподробней?
с какими параметрами запускать сервер и клиент?


 
tesseract ©   (2005-12-26 10:28) [5]

Если Com-server твой, то проблем не возникает - Integrated Debugging включаешь и отлаживаешь.

Группа проектов просто позволит ставить breakpoints одновременно  в коде клиента так и сервера.


 
Сатир   (2005-12-26 17:15) [6]


> Integrated Debugging включаешь

а где его включать?

Да, кстати о сервере: для соединения используется TSocketConnection вместо TDCOMConnection и Borland Socket Server.

Так в среде мне запускать сервер или клиент?


 
Набережных С. ©   (2005-12-26 18:41) [7]


> Сатир


> > Integrated Debugging включаешь
>
> а где его включать?

Он и так включен, в окне Tools/Debugger options, трогать не надо.

> Так в среде мне запускать сервер или клиент?

Конечно можно. Создаешь группу проектов - Project Group в репозитарии, включаешь в нее оба проекта, собираешь оба с включением отладочной информации, далее делаешь Compile All - именно компиляцию, не сборку! Все, теперь можешь активизировать тот или другой проект в окне Project Manager или в выпадающем списке рядом с кнопкой Run, и запустить их.
Но я сразу не обратил внимания, что у тебя написано:

> то в памяти создаётся другая копия сервера, а запущенная под средой не принимает запросы от клиента.

Это странно. У тебя какой параметр instancing задан при создании фабрики?
Но вообще-то можно подключиться и к уже запущенному экземпляру - в меню Run->Attach to process. Тут, правда, не всегда удачно срабатывает, но тогда я включаю на вкладке линкера добавление TD32 info и remote symbols, плюс ставлю бряк на Begin в файле проекта, тогда нормально работает.

PS Зря ты в потрепаться это задал - я сюда редко захожу, а остальные что-то не хотят учавствовать:(( Да и не очень подходит сюда тема.


 
Сатир   (2005-12-26 19:07) [8]


> Создаешь группу проектов - Project Group в репозитарии,
> включаешь в нее оба проекта, собираешь оба с включением
> отладочной информации, далее делаешь Compile All - именно
> компиляцию, не сборку!

группа проектов уже была созданна и в неё было включено оба проекта.
Открыл эту группу.
Нажал Compile All. Выбрал проект клиента, нажал Run. Но бряк в коде сервера не сработал, в памяти создалась другая копия сервера.


> Это странно. У тебя какой параметр instancing задан при
> создании фабрики?

Модель скорее всего однопоточная, потому что для каждой копии клиента создается отдельная копия сервера.


> PS Зря ты в потрепаться это задал - я сюда редко захожу,
>  а остальные что-то не хотят учавствовать:(( Да и не очень
> подходит сюда тема.

Задал в "Потрепаться" - думал, здесь народу больше бывает.
Если модеру угодно, пусть перенесут в COM/DCOM/COM+


 
Набережных С. ©   (2005-12-26 19:17) [9]


> Сатир   (26.12.05 19:07) [8]

:)) Так ты сначала запусти сервер, потом клиента, потом опять переключись на сервер, а уже после этого подключайся клиентом к серверу. Ну или через Attach to process, если почему-либо не устраивает.


 
Набережных С. ©   (2005-12-26 19:25) [10]


> Модель скорее всего однопоточная,

Не, я не про потоковую модуль, я про ciSingleInstance или ciMultiInstance. Хотя, первый клиент все-равно должен бы подключиться к уже запущенному экземпляру сервера, если не путаю по забывчивости, совсем плохая память стала:((, а SingleInstance давно не использовал.


 
Сатир   (2005-12-27 14:31) [11]


>  Так ты сначала запусти сервер, потом клиента, потом опять
> переключись на сервер, а уже после этого подключайся клиентом
> к серверу.

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


>  я про ciSingleInstance или ciMultiInstance.

а где в исходниках можно посмотреть, какая модель у сервера? Но судя по поведению сервера - ciMultiInstance.


 
Сатир   (2005-12-27 14:37) [12]

Полистал на выходных книжку Delphi и СОМ Тенцера. Ну хоть бы одну главу посвятили отладке. Ан-нет, об этом ни слова....


 
Набережных С. ©   (2005-12-27 17:14) [13]


> а где в исходниках можно посмотреть, какая модель у сервера?
>  Но судя по поведению сервера - ciMultiInstance.

Это один из флагов, передаваемых параметром в конструктор фабрики классов. Если СОМ-объект создавался мастером, то в секции инициализации модуля с декларацией СОМ-класса есть код создания фабрики для него. Вот там и указывается.

MultiInstance означает, что для всех клиентов будет использоваться один процесс сервера, и в нем будет создаваться необходимое число СОМ-объектов, по одному на каждого клиента.
SingleInstance означает, что для каждого клиента будет запускаться отдельный процесс сервера и в нем будет создаваться один экземпляр объекта.

Это довольно грубое описание, но достаточно близкое к истине, в большинстве случаев этого достаточно.

Но даже если у тебя стоит SingleInstance, то все равно, первый клиент должен подключаться к уже запущенному процессу, а вот для последующих должен запускаться отдельный сервер. У тебя что-то непонятное. Если у тебя SingleInstance, то могу предположить два варианта: первый запущенный процесс при попытке создать в нем объект почему-то возвращает ошибку, либо клиент в процессе запуска несколько раз подключается - отключается. В результате он первый раз подключается к уже запущенному серверу, потом отключается, а когда снова пытается подключиться, то СОМ, естественно, создает для него новый серверный процесс, так как первый запущенный уже "израсходован". Других объяснений описанной тобой ситуации мне что-то в голову не приходит. Правда, тут еще BSS может вносить свое, попробуй через DCOMConnection.


 
Карелин Артем ©   (2005-12-27 17:32) [14]

А в чем проблема-то? Запускаем две дельфины. Из одной клиента отлаживаем, из другой сервер. Вполне нормально отлаживается и через BSS.


 
Набережных С. ©   (2005-12-27 17:48) [15]


> Карелин Артем ©   (27.12.05 17:32) [14]

Да не нужны они в большинстве случаев, две дельфи-то, удобней в одной. У меня вот и так все нормально отлаживается, и через BSS тоже, и подобных проблем не бывает. Кроме того, всегда можно воспользоваться Attach to process, получим то же самое. Но описанная у него ситуация, боюсь, повторится и с двумя Delphi, потому как дело тут на 99.9% не в отладчике, а в коде.


 
Сатир   (2005-12-27 19:00) [16]


> попробуй через DCOMConnection

нет уж, этого пока пробовать не буду. Проект полностью рабочий. Отдали мне на время исправлять мелкие недоработки. Так вроде пока в основном все ошибки только в клиенте и его можно свободно отлаживать.
А в сервере самого кода немного. В основном запросы к оракловской базе через Query.
Так что большой необходимости его отлаживать нету. Просто хотелось для сноровки пройтись отладчиком по всему серверу, посмотреть как он работает. Ладно, попробую в очередной раз вызвонить разработчика и распросить у него секрет отладки сервера.


 
Сатир   (2005-12-27 19:05) [17]

может этот кусок сможет пролить на что-то свет

initialization
 TComponentFactory.Create(ComServer, TRefusSvr,
   Class_RefusSvr, ciSingleInstance, tmApartment);
end.


 
Набережных С. ©   (2005-12-27 19:41) [18]


> Сатир   (27.12.05 19:00) [16]
>
> > попробуй через DCOMConnection

Там, [13], вообще-то не только это было написано, как можно заметить, если его внимательно прочитать. В том числе и про это:

>  TComponentFactory.Create(ComServer, TRefusSvr,
>    Class_RefusSvr, ciSingleInstance, tmApartment);

А про DCOMConnection - это так, попутное замечание. А вообще-то, ciSingleInstance - довольно специфичный режим, нужный в относительно редких, особых случаях.



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

Форум: "Потрепаться";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.038 c
14-1135460710
VirEx
2005-12-25 00:45
2006.01.22
Klubbheads & DJ Disco


2-1136537310
Dreamse
2006-01-06 11:48
2006.01.22
Проблема с получением из dll String значений


8-1123878872
tazik
2005-08-13 00:34
2006.01.22
Плавные переходы с помощью BassPLayer a


1-1134367690
Atomic
2005-12-12 09:08
2006.01.22
Как в DateTimePicker програмно выделить месяц или год


14-1135372589
версия для печати
2005-12-24 00:16
2006.01.22
Программа Максимум





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