2014-10-01 66 views
0

我被要求構建一個將由ESB進程使用的Web服務(IIS託管),並且Web服務需要針對3個獨立的數據庫運行3個查詢以收集所需的數據。一旦收集完成,WS中會發生一些高級轉換(因此我們不直接在具有有限轉換能力的ESB流程內轉換)。WCF Web服務中的多個數據庫查詢?

我的問題是......它被看作是一種可接受的方法在Web服務中運行3個數據庫查詢?如果沒有其他方法將被推薦?

我很欣賞更多的數據塊我查詢,潛在的可靠性能降低,但我們有負載均衡和集羣DB農場所以一般的Web服務應始終能夠連接到數據庫服務器上的方法

的思考?

+0

三個問題。首先,有多少人會執行這個Web服務,其次是他們多久執行一次這個Web服務,第三,數據是否需要實時數據? – Icemanind 2014-10-01 21:12:45

+0

嗨,1)只是一個ESB過程(沒有人),2)服務可能每隔幾分鐘就會調用一次,3)是數據必須是實時的,我們不能緩存任何東西 – Developr 2014-10-01 21:22:13

回答

0

由於您無法實現任何類型的緩存,因此您的需求似乎決定了您查詢三個不同的來源。

至於最好的辦法,我會考慮Parallel Tasks,其中你甚至可以在任務上使用CancellationToken來設置超時,以確保你不超過WCF響應超時。

+0

是的並行任務是我也在看:)雖然如果我是誠實的,我最初的想法是在每個連接的連接字符串中使用連接超時參數並將其設置爲低(即,與默認值15相反),以嘗試保持響應時間只是'萬一'數據庫無法訪問。 – Developr 2014-10-01 21:53:45

+0

爲什麼每個人都會立即參加並行任務和類似的「創新」:)。爲每個查詢啓動3個線程,然後等待它們使用'Join()'完成(如果您想要放一個,它也接受超時)有什麼問題? :) – xpa1492 2014-10-02 03:10:31

+0

@Developr您可能還想設置數據庫連接超時,但除非您使用單獨的線程,否則必須等待所有呼叫的總數。 – landoncz 2014-10-02 13:03:59

0

這取決於你的任務。如果您不需要保證ACID,則可以對三個數據庫使用三個查詢。

如果您需要使用交易,您可以使用transactions in WCF services。但請注意,交易意味着是短暫的,流動交易可能會增加交易時間。