2009-08-20 40 views
6

我想了解如何使用SOAP或XML-RPC爲我的產品創建遠程開放API。 問題是,我的API的一部分將要求我能夠將事件從服務器推送到客戶端 - 我需要能夠「發送回調」,而不僅僅是「調用函數」作爲我的API的一部分。 在SOAP或XML-RPC中有沒有一種好的方法可以做到這一點?在XML-RPC或SOAP中實現回調

回答

7

有兩種方法可以在RPC系統中執行通知:推式模型和拉式模型。在拉模型中,客戶端將定期查詢服務器是否有任何通知可用。服務器需要存儲它們直到客戶端獲取它們(或直到它們到期)。作爲一種變體,客戶端可能會阻塞RPC調用,直到下一個事件變爲可用爲止,然後立即返回。這對於CORBA來說工作得很好,但對於SOAP或XML-RPC不能很好地工作,因爲HTTP實現通常不準備將連接保持打開幾個小時。

在推模式中,生產者將調用消費者的RPC,使消費者成爲服務器。這對於SOAP或XML-RPC來說效果不佳,因爲客戶端通常不準備承擔服務器角色,並且防火牆可能阻止回調通過。所以定期拉動是最現實的方法。

P.S.你可能已經注意到我沒有遵循你的術語:你不能推事件。事件是發生的事情。您只能推送通知,這是事件發生的信息。

+0

這意味着基本上我會留下定期更新,這在資源方面有些浪費。 感謝您的回答 – 2009-08-21 04:10:15

0

你可以用WCF來做到這一點。但是,我不知道您是否可以以可互操作的方式進行操作。看看Duplex Services

1

好的,最終做出的決定是將回調處理爲不會立即返回的API。

基本上,將發送RPC-XML請求,要求在事件的給定列表上通知。我們的服務器會一直等到發生其中一個事件,然後在設定的時間量之後將其作爲響應或超時進行報告,通知沒有任何事情發生。調用者將能夠嘗試再次發送請求以繼續等待。