[Delphi] Chunked transfer encoding

0

Czy ktoś wie co mam zrobić, aby w Delphi (mam w firmie starą wersję Delphi 6 i raczej nie będę mógł kupić nowej) można było odebrać wysłany przez serwer dokument, który został wysłany za pomocą metody "chunked" (czyli pokawałkowana)?

http://pl.wikipedia.org/wiki/Lista_nag%C5%82%C3%B3wk%C3%B3w_HTTP#Transfer-Encoding
http://en.wikipedia.org/wiki/Chunked_transfer_encoding

Już tłumacze o co biega.
Łączę się z serwerem naszego kontrahenta za pomocą WebServices. Używam do tego programu napisanego przez nas w Delphi opartego o komponent HTTPRIO. Niestety mam problem przy dłuższych zapytaniach. Zapytanie całe spływa do nich, ale podczas odpowiedzi zrywa połączenie i dokument XML dochodzi do nas w pewnym momencie urwany.

Informatycy z tamtej firmy odpowiedzieli mi, że ich serwer otrzymuje ode mnie pliki w wersji HTTP/1.1, które obsługują te kodowanie "chunked". Dlatego też ich serwery z automatu odpowiedź wysyłają właśnie metodą "chunked". Niestety okazuje się, że moje Delphi nie potrafi takiego pliku odczytać...

Tak więc rozwiązania są dwa: albo będę wysyłał im pliki w HTTP/1.0 (a nie HTTP/1.1) albo znajdę sposób na odczytanie tych plików wysłanych metodą "chunked".

Ktoś wie, co miałbym zrobić, aby choć jedno z tych rozwiązań wcielić w życie?

0

na chłopski rozum to po prostu odbierasz wszystkie części i scalasz je w jeden plik. Nie wiem co to i jak działa HTTPRIO więc konkretnie nie pomogę.

Daj jeszcze kawałek, gdzie wysyłasz zapytanie i odbierasz to co serwer odsyłą

0
Misiekd napisał(a)

na chłopski rozum to po prostu odbierasz wszystkie części i scalasz je w jeden plik. Nie wiem co to i jak działa HTTPRIO więc konkretnie nie pomogę.

Problem w tym, że zanim te wszystkie części przyjdą, to zrywa połączenie.

Co to jest HTTPRIO? Tutaj jego Object Inspector:
user image
...może wystarczy którąś z opcji zmienić?

Co do kodu, to jest tego tak dużo, że chyba nie ma sensu wklejać kilkuset linijek.

0

spróbuj zmienić agenta na SOAP 1.0

a powiedz mi czy masz tam jakiś komponent odpowiedzialny za samo połączenie? Jeśli tak to zobacz czy nie ma on czegoś takiego jak RequestLive albo podobnego

0
Misiekd napisał(a)

spróbuj zmienić agenta na SOAP 1.0

Zmieniłem, ale nic to nie dało. Oto kawałek "wydruku" z programu TCPMon:

POST /axis2/services/TvhwsService HTTP/1.1
Accept: text/xml
SOAPAction: "urn:inquiry"
Content-Type: text/xml
User-Agent: Borland SOAP 1.0
Host: XXX.XX.XXX.XXX:8080 mniejsza z tym jaki IP ;-)
Content-Length: 4655
Connection: Keep-Alive
Cache-Control: no-cache

Borland SOAP zmieniło się z 1.1 na 1.0, ale HTTP/1.1 pozostało tak, jak przedtem...

Program wysypuje się na pogrubionej linijce:

try
resp := (HTTPRIO as TvhwsServicePortType).inquiry(returnToken, WSInqHead, WSInqLine, WSInqText);
connection.CurrentSessionID := resp.authToken;
Result := resp;
except
(...)

Misiekd napisał(a)

a powiedz mi czy masz tam jakiś komponent odpowiedzialny za samo połączenie? Jeśli tak to zobacz czy nie ma on czegoś takiego jak RequestLive albo podobnego

Obiektem odpowiedzialnym za samo połączenie jest więc chyba te HTTPRIO. Żadnego RequestLive tam nie mam...

0

no to nie mam więcej pomysłów :(
WebSerwices obsługiwałem ale z c# i tam nie miałem problemów ale pewnie to Ci niewiele pomogło

0

A może ktoś wie, jak się w Delphi 6 ustawia czas oczekiwania na odpowiedź z WebServices?
Może to jest problem, że długo nie ma odpowiedzi, zrywa połączenie i dochodzi tylko część pliku XML?

1 użytkowników online, w tym zalogowanych: 0, gości: 1