xmlrpc protocolo error events soap callback xml-rpc

events - protocolo - xmlrpc error



ImplementaciĆ³n de una devoluciĆ³n de llamada en XML-RPC o SOAP (3)

Estoy tratando de entender cómo puedo usar SOAP o XML-RPC para crear una API remota y abierta para mi producto. El problema es que parte de mi API requerirá que pueda enviar los 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?


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.

PD, puede haber notado que no seguí su terminología: no puede impulsar eventos . Un evento es algo que sucede. Solo puede presionar la notificación, que es información de que ocurrió un evento.


Ok, eventualmente la decisión tomada fue lidiar con devoluciones de llamadas como API que no regresan de inmediato.

Básicamente, se enviará una solicitud RPC-XML, solicitando ser notificado 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.


Puedes hacer esto con WCF. Sin embargo, no sé si puedes hacerlo de una manera interoperable. Mire en los servicios dúplex .