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

Вниз

SOAP в Delphi. Что делать с зависонами   Найти похожие ветки 

 
Sergey Masloff   (2009-02-19 23:49) [0]

Пытаемся победить проблемы Борландовского MIDAS. Так как пациент скорее мертв а кода его использующего очень много, возникла и была реализована идея.
 Написан .NET WebService который умеет отдавать и принимать данные в формате пакетов ClientDataSet.
 Написан клиентский софт - компонент аналог WebConnection. То есть на клиенте заменяется один компонент на проект и все остальное работает с сервисом радостно думая что работает с сервером приложений Midas. До этой поры все хорошо. Но при реальной нагрузке выяснилось следующее:
- иногда (десятые доли процента от всех вызовов) вызов подвисает
- подвисает он не на сервере (через перехватчики отслеживаются пары request-response)
- установка таймаута на клиенте (на сервере и так стоит) ничего не дает - повисшее приложение не отвисает никогда (пробовал на ночь оставлять)
=====================================================
 Так как оставлять так нельзя появилась идея делать вызов в потоке (не для параллельности а просто чтобы таймаутом управлять через WaitForSingleObject).
 Все получилось, теперь максимальным временем зависона можно управлять (и повторять попытку).
 Остается вопрос что делать с повисшими теперь уже потоками (Thread). Попытка дать Free() приводит к зависанию (естественно) так как Terminate не получает шанса в зависшем потоке.
 Оставлять зависшие потоки висящими тоже не хочется
 Делать им TerminateThread некошерно - ресурсы не освобождает

 Что еще попробовать?


 
Хитрий Лис   (2009-02-20 08:55) [1]

Выделять ресурсы в другом потоке... и делать TerminateThread :)


 
Sergey Masloff   (2009-02-20 09:17) [2]

Хитрий Лис   (20.02.09 08:55) [1]
К сожалению, не получится. Там ресурсы выделяются где-то глубоко-глубоко в потрохах. Где-то не значит что я не знаю где, но это место (места) для модификации недоступны, а доступна точка входа (GetData) которая их выделяет качает данные и в случае успеха ресурсы высвобождает


 
Хитрий Лис   (2009-02-20 09:20) [3]

Жаль... такая идея пропала :) а запускать в другом процессе тоже не получиться ?
А взаимодейстие процессов организовать посылкой XML-ки через WM_COPYDATA.


 
Sergey Masloff   (2009-02-20 09:38) [4]

Sergey Masloff   (20.02.09 09:17) [2]
В другом процессе слишком накладно... При нормальной работе пользователя таких запросов идет по несколько в секунду. Мне и идея с создаванием каждый раз отдельного потока не нравилась но вобщем-то на скорость не повлияло - все же на сетевом уровне задержки больше.

 Пока картина такая - часть тредов (ориентировочно 0-5 на 1000) остается висящей. Клиент не виснет не тормозит но память постепенно отъедает. В таком виде оставлять нельзя. Уже появляется идея клиента тоже сделать .NET а дельфийский клиент с ним общался бы локально. Но это пока слишком наворочено выглядит. Идея-то была малой кровью...


 
Dnd   (2009-02-20 12:11) [5]

Маслофф, здесь ты ответ вряд ли получишь. Лучше на королевстве задай вопрос (что ты, наверное, сделал) и не обломаться зарегаться в ЖЖ и на http://community.livejournal.com/ru_delphi/


 
Dnd   (2009-02-20 12:42) [6]

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


 
iZEN ©   (2009-02-20 17:11) [7]


> Dnd   (20.02.09 12:42) [6]
>
> А лучше вообще потихонечку отказываться от всего дельфового


Ага. Потихонечку не получится — Delphi завязана на Win32, и .NET не в меньшей степени тоже. А если их скрестить, то получится жуткий кадавр. Поимеете проблем с сопровождением/обновлением такого это точно.

Лучше сразу:
http://www.ibm.com/developerworks/ru/library/dm-0712bommireddipalli/index.html



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

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

Наверх




Память: 0.48 MB
Время: 0.024 c
2-1236178443
BeeHead
2009-03-04 17:54
2009.04.19
Установка компонент


15-1234596212
Palladin
2009-02-14 10:23
2009.04.19
Декларирование указателя в Си


15-1234696527
Юрий
2009-02-15 14:15
2009.04.19
Портрет пользователей delphimaster.ru


15-1235032497
Kostafey
2009-02-19 11:34
2009.04.19
Стратегия пустых полей


2-1235746713
Mops
2009-02-27 17:58
2009.04.19
Postdata & BeforeNavigate2 & string