2009-08-20 12 views
6

Próbuję zrozumieć, w jaki sposób mogę użyć protokołu SOAP lub XML-RPC do utworzenia zdalnego, otwartego interfejsu API dla mojego produktu. Problem polega na tym, że część mojego API będzie wymagać ode mnie przesyłania zdarzeń z serwera do klienta - będę musiał "wysyłać wywołania zwrotne", a nie tylko "wywoływać funkcję" jako część mojego API . Czy można to zrobić w SOAP lub XML-RPC?Implementowanie wywołania zwrotnego w XML-RPC lub SOAP

Odpowiedz

7

Istnieją dwa sposoby tworzenia powiadomień w systemie RPC: model wypychania i model wyciągania. W modelu pull klient okresowo wysyła zapytanie do serwera, czy są dostępne powiadomienia. Serwer musi je przechowywać, dopóki klient ich nie pobierze (lub do momentu wygaśnięcia). W wariancie klient może mieć blokujące wywołanie RPC, które blokuje dostęp do następnego zdarzenia, a następnie natychmiast je zwraca. Działa to dobrze z CORBA, ale nie działa tak dobrze z SOAP lub XML-RPC, ponieważ implementacje HTTP zazwyczaj nie są przygotowane na pozostawienie otwartego połączenia przez wiele godzin.

W modelu wypychanym producent wywoła RPC na kliencie, czyniąc konsumenta serwerem. To też nie działa zbyt dobrze z SOAP lub XML-RPC, ponieważ klient zazwyczaj nie jest przygotowany do przejęcia roli serwera, a zapory mogą uniemożliwić uzyskanie połączenia zwrotnego. Okresowe przyciąganie jest zatem najbardziej realistycznym podejściem.

P.S. być może zauważyłeś, że nie podążałem za twoją terminologią: nie możesz wcisnąć zdarzeń. Wydarzenie to coś, co się dzieje. Możesz przesłać tylko powiadomienie, które jest informacją, że zdarzenie miało miejsce.

+0

Oznacza to, że w zasadzie pozostaje mi okresowa aktualizacja, która jest nieco marnotrawna pod względem zasobów. Dzięki za odpowiedź –

0

Możesz to zrobić za pomocą WCF. Jednak nie wiem, czy można to zrobić w sposób interoperacyjny. Zajrzyj do Duplex Services.

1

OK, w końcu podjęto decyzję, aby oddzwonić do funkcji API, które nie powracają natychmiast.

Zasadniczo zostanie wysłane żądanie RPC-XML z prośbą o powiadomienie o podanej liście zdarzeń. Nasz serwer będzie czekał, aż dojdzie do jednego z wydarzeń, a następnie zgłosi go z powrotem jako odpowiedź lub limit czasu po określonym czasie, powiadamiając, że nic się nie stało. Dzwoniący będzie mógł spróbować wysłać żądanie ponownie, aby kontynuować czekanie.

Powiązane problemy