Piotr Nowicki

Piotr Nowicki JFB Systems,
właściciel

Temat: web service i stan wykonania metody

WebService uruchamia metodę, która zajmuje się obróbką dużej ilości danych, czas przygotowania danych to 10-20 minut, klient otrzymuje na koniec informacje o przygotowaniu danych.

Problem: czy da się do klienta przesyłać stan wykonania metody np."wykonało się 10% przetwarzania danych" itd, nie przerywając działania metody, która przygotowuje dane, a następnie przekazać informacje o przygotowaniu danych?

konto usunięte

Temat: web service i stan wykonania metody

Schemat WS jest prosty - żądanie-odpowiedź i chyba niewiele można w tej kwestii zmienić:/.

Ale nie widzę przeciwwskazań, by zaimplementować oddzielny fragment kodu, który będzie powiadamiał o postępach prac. Tyle, że wówczas WS musiałby robić za klienta, a user za serwer. Jeśli to ty implementujesz obie strony, to spoko. Zdefiniowałbym synchronizowaną kolejkę do której dodawałoby się obiekty zawierające info o postępie prac i adresie webowym klienta. Jak postęp prac osiągnie ileś-tam, dodajemy do kolejki obiekt, a inny wątek/proces wysyła powiadomienie.

Ew. możesz zamiast czekać na obrobienie danych wysyłać od razu odpowiedź z unikalnym ID procesu, a user musiałby się odpytywać o status. Jeśli nie gotowe - dostaje postęp prac. Jeśli gotowe - dostaje odpowiedź. Z tym że ten schemat zupełnie zmienia sam webservice, tzn. jego specyfikację.

Tak, wiem, kombinuję:)
Bartosz T.

Bartosz T. Software Development
Engineer

Temat: web service i stan wykonania metody

Lepiej zrob tak (z tym ze wymaga n requestow)

1.) metoda ktora zwraca liczbe rekordow na zadany klucz
2.) metoda ktora zwraca rekordy z ustalonym limitem np. 1000, i ktora za parametr przyjmuje przesuniecie (offset) w wyniku.

Wtedy klient webservice wywoluje metode 1.) i zna liczbe rekordow do pobrania.
Nastepnie wykonuje w petli metode 2.) pobierajac wyniki (przy kazdej iteracji zwiekszajac przesuniecie) aż do spelnienia warunku z 1.)

Na podstawie danych z 1.) i 2.) masz wszystko co potrzeba do wyswietlenia postepu importu danych.

>>edit

Lub jesli nie mozesz stronnicowac wynikow najprosciej zwroc do klienta szacowany czas przygotowania danych i na tej podstawie robisz progress bar - jesli po tym czasie jeszcze sie nie skonczylo zatrzymujesz pasek na 90 % (z tego o zauwazylem bardzo czesto stosowane :)Bartosz T. edytował(a) ten post dnia 19.01.11 o godzinie 11:25
Tomasz D

Tomasz D Programista
Java/JEE, freelancer

Temat: web service i stan wykonania metody

Darek dobrze kombinuje :)
1. Klient wysyła żądanie i dostane jakiś uid.
2. Klient odpytuję inną metodę WS o status i dostaje albo procent albo dane, gdy metoda się skończy.
Piotr Wierzbowski

Piotr Wierzbowski IT Architect, Asseco
Poland S.A.

Temat: web service i stan wykonania metody

Jeżeli nie musi być WebService over HTTP (czyli 'normalny') to lepiej jest użyć JMS do tego, wrzucić komunikat do kolejki z atrybutem replyTo wskazujacym na jakąs kolejke tymczasową i w tej kolejce oczekiwac na dane (np. o postępie i przygotowaniu danych) przesyłane przez adresata pierwszego komunikatu.

WebService over JMS

Wielokrotnie sprawdzona metoda
http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/...

Następna dyskusja:

Web Service/Jdeveloper/Webl...




Wyślij zaproszenie do