6

我试图了解如何使用 SOAP 或 XML-RPC 为我的产品创建远程、开放的 API。问题是,我的部分 API 将要求我能够将事件从我的服务器推送到客户端——我需要能够“发送回调”而不仅仅是“调用函数”作为我的 API 的一部分。在 SOAP 或 XML-RPC 中有没有好的方法来做到这一点?

4

3 回答 3

7

在 RPC 系统中进行通知有两种方法:推送模型和拉取模型。在拉模型中,客户端会定期向服务器查询是否有可用的通知。服务器需要存储它们直到客户端获取它们(或直到它们过期)。作为一种变体,客户端可能有一个阻塞 RPC 调用,该调用会阻塞直到下一个事件可用,然后立即返回。这在 CORBA 中运行良好,但在 SOAP 或 XML-RPC 中运行不佳,因为 HTTP 实现通常不准备让连接打开数小时。

在推送模型中,生产者将调用消费者的 RPC,使消费者成为服务器。这也不适用于 SOAP 或 XML-RPC,因为客户端通常不准备承担服务器角色,并且防火墙可能会阻止回调通过。所以周期性拉动是最现实的方法。

PS你可能已经注意到我没有遵循你的术语:你不能推送事件。事件是发生的事情。您只能推送通知,这是事件确实发生的信息。

于 2009-08-20T06:34:24.240 回答
1

好的,最终做出的决定是将回调作为不会立即返回的 API 来处理。

基本上,将发送一个 RPC-XML 请求,要求在给定的事件列表上得到通知。我们的服务器将等到其中一个事件发生,然后在设定的时间后将其作为响应或超时报告回来,通知没有发生任何事情。调用者将能够尝试再次发送请求以继续等待。

于 2009-09-16T17:01:44.367 回答
0

您可以使用 WCF 执行此操作。但是,我不知道您是否可以以可互操作的方式进行操作。查看双工服务

于 2009-08-21T04:25:45.403 回答