Mam projekt w ramach którego wykonywany jest szereg czynności, wśród których jest też komunikacja za pomocą SOAPa.
Niestety raz na jakiś czas (co 200-250 uruchomień - 12 dziennie) aplikacja ... zawisa. Log operacji generowany przez aplikację pokazuje, że się prawidłowo uruchomiła, że wykonała ileś operacji cyklicznych i w pewnym momencie freeze. Widać, że część procesy przeszła, a reszta ... program stoi.
Szukając przyczyny dobrnąłem do miejsca, gdzie stwierdzam, że musi się coś dziać na etapie komunikacji z usługą udostępnioną poprzez SOAP.
W moim przypadku kluczowym jest, aby proces, który ma się odbyć dobiegł do końca - nawet jeżeli któreś pozycje z całego procesu zostaną pominięte.
Po tym przydługawym wstępie: Do komunikacji po SOAP używam komponentu THTTPRIO (D XE2). Zapytanie wywołuję po prostu: HTTPRIO1.HTTPWebNode.Execute(<pytanie>,<odpowiedź>). Pomyślałem sobie, że najfajniej w moim przypadku będzie po prostu zrobić coś, co wykona Execute, poczeka np. 2-3 sekundy i jeżeli się nie wykona - oleje Execute i przejdzie do kolejnej pozycji/etapu procesu.
Zablokowałem się, bo jeżeli użyłbym TTimer - to przecież nie ma możliwości, żeby przerwał działanie innej procedury w miejscu wywołania Execute i podjął dalsze działanie od następnej instrukcji.
Kurcze ... nie wiem czy ja to dostatecznie jasno tłumaczę.