2011-11-01 56 views
1

我們開發了一個WCF服務,作爲我們系統的API。WCF服務 - 當客戶端沒有得到響應時會發生什麼?

一些方法公開功能,最終寫入和更新數據到數據庫。

比方說客戶端發送這些請求之一,服務執行所需的操作,而客戶端斷開出於某種原因,並沒有得到迴應。

問題的數據的一個例子正在更新 - 「添加X會員M」。

只是爲了讓事情更清晰 - 客戶端發送請求並接收通知有關請求的成功/失敗的響應。

我們的問題是 - 如果客戶端發送執行的請求但未收到響應,我們如何才能通知客戶端有關響應?

+0

如果客戶端未收到服務響應,則會生成異常。沒有那麼有用嗎? – shrutyzet

+0

我在談論服務端......如果客戶端收到錯誤消息但服務已執行操作,該怎麼辦? – Mithir

回答

1

你不應該做任何事情。該服務執行了客戶要求的內容。如果客戶注意到它已斷開連接,則應使用單獨的呼叫向服務詢問是否執行了操作。

如果你絕對需要可靠的消息,然後看看在WCF的可靠消息選項。

1

一種方法是使用異步消息傳遞模式,所以不是提交請求,並等待響應,你將提交一個請求,並繼續,並有是一個回調合同或面向外部的服務合同中您的服務可以連接回(當您處理典型的客戶端 - 服務器場景時,回調協議是最好的選擇)。回調的缺點是它們只支持使用雙向綁定(WSDualHttpBinding,NetTcpBinding等),這會限制與非WCF技術的互操作性。

另一種選擇是使用企業服務總線。這基本上就是位於中間的軟件,它可以協調客戶和服務之間的所有事情。這樣,如果您的客戶端超時,企業服務總線可以觸發「補償」活動,以確保您的客戶端和服務最終處於一致狀態。

更新: 企業服務總線是一個非常廣泛的話題。 Wikipedia is a good place to startAmazonoffersseveralbookscoveringvariousplatformsin detail。就實際實現而言,Microsoft提供BizTalk Server,IBM提供WebSphere ESB,Oracle購買了提供AquaLogic(現在是Oracle Service Bus)的BEA Systems,還有多種開源系統,包括Apache ServiceMix,Apache Synapse和Mule。

+0

感謝joel,關於第一個選項,我們放棄了它,因爲你描述的缺點。關於第二個選項 - 你能指導我一些有用的信息嗎?我之前沒有聽說過... – Mithir

+0

@Mithir我已經更新了我的答案(我無法適應評論中的所有鏈接) –

相關問題