2010-07-23 49 views
1

我正在爲Azure創建一個WCF服務(CALLER)。服務(CALLER)調用另一個第三方服務(EXTN)的異步方法。第三方服務調用由Azure託管的另一個WCF服務(LISTNER)的回調方法。 CALLER在status = PENDING中輸入數據庫中的服務詳細信息。這是輪詢數據庫的正確方法嗎?

在回調服務(LISTNER)中,我將數據庫中的請求狀態更新爲COMPLETED/FAILED。

但我希望在SQL Azure數據庫中更新狀態時通知CALLER。

我想創建一個工作線程,它會定期輪詢數據庫來檢查狀態更新並通知CALLER這件事。

有沒有其他更好/更有效的替代方法?

回答

0

不是。還有另外一種方法(不確定它是否可以在azure上運行),方法是使用集成的SQL消息隊列(通過觸發器更新隊列),然後您的線程可以連續輪詢(有一種方法可以在etnry中讀取WAIT所以你發出一個,它等待),但除此之外...

...不,不是從數據庫級別。

我有一個類似的應用程序,我通過一個批准觸發器處理它OUTSIDE數據庫(即通知從值改變的業務邏輯發送)。

+0

您能否提供詳細資料? – Ram 2010-07-23 12:11:21

1

您正在尋找的功能在AppFabricservice bus中實現。

+0

嗨Jefferey, 請您詳細說明一下嗎? – Ram 2010-08-03 06:40:03

+1

聽起來你正在實現一個經典的[Database-as-IPC] [1]。 AppFabric服務總線將允許您創建發佈/訂閱事件系統。作爲服務總線發佈者的LISTENER將發佈'im done和status is'消息到服務總線中,然後作爲服務總線用戶的CALLER將接收消息並對其執行操作。 [1]:http://en.wikipedia.org/wiki/Database-as-IPC – JeffreyABecker 2010-08-03 19:36:41

0

另一種選擇是使用隊列並讓調用者輪詢來自偵聽器的通知消息。服務總線可以通過讓調用者訂閱從監聽器發送的事件通知來使用。在你的場景中,儘管它不提供比隊列更多的功能 - 如果你在防火牆後面,服務總線也使用輪詢。

隊列可能是發送通知最有效的方式 - 這就是爲什麼它們是首先創建的。服務總線用於通過提供比簡單消息傳遞更多的功能來創建不同服務之間的半永久連接。這使得它不夠靈活,需要更多的編程。其計費模式(按SB連接計費)也反映了這一點。您不需要使用很多SB連接。

相關問題