2011-04-14 62 views
0

我目前正在設計一個應該用於返回敏感數據的服務(wsHttp)。一旦客戶請求這些數據,我就從數據庫中獲取它,編譯一個列表,然後從數據庫中刪除數據並返回列表。在WCF中構建可靠的服務

我擔心的是,在返回客戶端的路上發生了一些事情(網絡問題......)我已經從數據庫中刪除了數據,但客戶端永遠不會得到它。

我在這裏有哪些開箱即用的解決方案?

回答

1

這是分佈式計算中的固有問題。 有沒有簡單的解決方案。問題是從這樣的錯誤中恢復是多麼重要。

例如,如果某人刪除了某些記錄,但客戶端斷開連接,下次連接時,他會將這些記錄視爲已刪除。即使他試圖再次刪除它們(數據留在UI中),這也不會造成任何傷害。

對於銀行轉移貨幣,他們有一個錯誤解決機制,他們在第二個過程中匹配他們之間發生的交易。衝突將手動處理。

一些系統,例如NServiceBus依靠MSMQ存儲郵件最終一致性其中一個消息發往客戶端時,他再次連接終將到來。

1

沒有開箱即用的解決方案。您需要實施某種形式的用戶/自動確認,確認數據已收到,並且只有在返回時才刪除。

Ed

0

有一個簡單的解決方案。但它並沒有在一個盒子裏。

像WS-ReliableMessaging(或同樣TCP/IP)的協議在您的消息傳遞下爲您提供了一層可靠性,但是一旦該層將消息卸載到上述層,所有投注都將關閉。

因此,可靠性只能在絕對最高層 - 應用層完全解決,而不能由通信堆棧中的任何較低層解決。這使其成爲一流的企業關注點,而不是單純的技術問題。

該問題可以通過對刪除敏感數據的過程稍作更改來解決。

不是立即刪除它,而是將其標記爲刪除。然後,構建推動您的服務的業務流程,聲明客戶必須確認收到敏感數據。然後,當您收到確認信息後,您可以安全地刪除標記爲刪除的數據,並知道它已收到。

我最近寫了一個blog post推理,可靠性是一個不能卸載到較低層的業務問題。