2009-08-20 1 views
6

Я пытаюсь понять, как я могу использовать SOAP или XML-RPC для создания удаленного открытого API для моего продукта. Проблема заключается в том, что часть моего API потребует от меня возможности получать события, перенесенные с моего сервера на клиента, - мне нужно будет иметь возможность «отправлять обратный вызов», а не только «вызывать функцию» как часть моего API , Есть ли хороший способ сделать это в SOAP или XML-RPC?Реализация обратного вызова в XML-RPC или SOAP

ответ

7

Существует два способа уведомления в системе RPC: модель push и модель pull. В модели pull, клиент будет периодически запрашивать сервер, доступны ли какие-либо уведомления. Сервер должен хранить их до тех пор, пока клиент не выберет их (или пока они не истекут). В качестве варианта клиент может иметь блокирующий RPC-вызов, который блокирует до тех пор, пока следующее событие не станет доступным, а затем сразу вернется. Это отлично работает с CORBA, но не так хорошо работает с SOAP или XML-RPC, поскольку реализации HTTP обычно не готовы оставлять соединение открытым в течение нескольких часов.

В модели push производитель будет вызывать RPC на потребителя, делая потребителя сервером. Это слишком плохо работает с SOAP или XML-RPC, так как клиент, как правило, не готов выполнять роль сервера, а брандмауэры могут препятствовать прохождению обратного вызова. Таким образом, периодическая тяга касается наиболее реалистичного подхода.

P.S. вы, возможно, заметили, что я не следовал вашей терминологии: вы не можете нажать события. Событие - это то, что происходит. Вы можете только нажать уведомление, которое является информацией о том, что событие произошло.

+0

Это означает, что по существу я остаюсь с периодическими обновлениями, что несколько расточительно с точки зрения ресурсов. Спасибо за ответ –

0

Вы можете сделать это с помощью WCF. Однако я не знаю, можете ли вы сделать это в интероперабельном ключе. Посмотрите на Duplex Services.

1

Хорошо, в конечном итоге было принято решение обработать обратные вызовы как API, которые не возвращаются немедленно.

В принципе, запрос RPC-XML будет отправлен с запросом на уведомление по определенному списку событий. Наш сервер будет ждать, пока произойдет одно из событий, а затем сообщит об этом в ответ или тайм-аут через определенное время, сообщив, что ничего не произошло. Вызывающий вызов сможет снова отправить запрос, чтобы продолжить ожидание.