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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.05 c
15-1224504901
Правильный$Вася
2008-10-20 16:15
2009.04.19
глобальный кризис и программисты


2-1236084646
StriderMan
2009-03-03 15:50
2009.04.19
Глюк TDateTimePicker.OnChange


2-1235726156
Dennis I. Komarov
2009-02-27 12:15
2009.04.19
TField.Value to string


6-1202129355
kDenis
2008-02-04 15:49
2009.04.19
winhttp.dll


15-1234954507
desc
2009-02-18 13:55
2009.04.19
Существуют ли правила, ГОСТы, стандарты ит.д.





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