2009-08-20 12 views
6

Estoy tratando de comprender cómo puedo usar SOAP o XML-RPC para crear una API abierta y remota para mi producto. El problema es que parte de mi API requerirá que pueda enviar eventos desde mi servidor al cliente. Tendré que poder "enviar una devolución de llamada" y no solo "llamar a una función" como parte de mi API . ¿Hay una buena manera de hacerlo en SOAP o XML-RPC?Implementación de una devolución de llamada en XML-RPC o SOAP

Respuesta

7

Hay dos formas de hacer notificaciones en un sistema RPC: el modelo push y el modelo pull. En el modelo de extracción, el cliente consultará periódicamente al servidor si hay notificaciones disponibles. El servidor necesita almacenarlos hasta que el cliente los recupere (o hasta que caduquen). Como una variante, el cliente puede tener una llamada RPC de bloqueo que bloquea hasta que el próximo evento esté disponible, y luego regresa de inmediato. Eso funciona bien con CORBA, pero no funciona tan bien con SOAP o XML-RPC, ya que las implementaciones HTTP generalmente no están preparadas para dejar una conexión abierta durante horas.

En el modelo push, el productor invocará un RPC en el consumidor, convirtiendo al consumidor en un servidor. Eso tampoco funciona muy bien con SOAP o XML-RPC, ya que el cliente normalmente no está preparado para asumir el rol de servidor, y los firewalls pueden evitar que la devolución de llamada se complete. Entonces, la atracción periódica es acerca del enfoque más realista.

P.S. Es posible que haya notado que no seguí su terminología: no puede presionar eventos. Un evento es algo que sucede. Solo puede presionar la notificación, que es información de que ocurrió un evento.

+0

Esto significa que, esencialmente, me quedan actualizaciones periódicas, lo que es un poco derrochador en términos de recursos. Gracias por la respuesta –

0

Puede hacerlo con WCF. Sin embargo, no sé si puedes hacerlo de una manera interoperable. Mire en Duplex Services.

1

Ok, finalmente, la decisión tomada fue tratar las devoluciones de llamadas como API que no regresan de inmediato.

Básicamente, se enviará una solicitud RPC-XML, pidiendo que se le notifique en una lista dada de eventos. Nuestro servidor esperaría hasta que ocurriera uno de los eventos y luego lo informaría como respuesta o tiempo de espera después de un período de tiempo determinado, notificando que no sucedió nada. La persona que llama podrá intentar enviar la solicitud nuevamente para continuar esperando.

Cuestiones relacionadas