2009-08-02 38 views
2

我有一個.NET Winform一次部署的胖客戶端,可以與三個數據庫,2個SQL Server數據庫和一個Oracle數據庫進行通信。WinForm胖客戶端:架構決策:我做錯了嗎?

第一個SQL Server數據庫,我會打電話給Master。我想要在Master數據庫中添加更多表格和列,但我被告知我不會獲得這樣做的權利,這是不可協商的。因此,我決定添加一個新的SQL Server數據庫,我將調用Extensions數據庫來存儲我想要放在Master中的附加信息。

因爲我沒有權利放置在同一臺服務器作爲主上擴展數據庫,我創建了另一臺服務器上擴展數據庫,並創造了從擴展數據庫服務器主人的數據庫服務器中的數據庫鏈接。這使我可以執行跨越兩個數據庫的查詢。我還有第三個數據庫,一個Oracle,偶爾會連接到這個數據庫。

因爲我認爲連接到Oracle數據庫需要安裝不太可能位於最終用戶PC上的Oracle驅動程序,所以我決定讓WinForm客戶端調用Web服務,Web服務將返回結果。爲了一致起見,因爲我的直覺告訴我應該從一個地方執行數據庫訪問操作,所以當胖客戶端需要與SQL Server數據庫交談時,我採用了同樣的方法,即他們通過Web服務。

現在我在質疑我是否需要先調用Web服務器,然後讓Web服務器調用數據庫而不是在胖客戶端的用戶PC上打開連接,直接連接到SQL Server數據庫。請注意,我所指的應用程序是需要訪問這三個生產數據庫的非官方實用程序,但不允許實際在生產環境中運行,因此我懷疑我的開發Web服務器和生產數據庫之間的普通高速管道不適用於此。

爲了獲得最佳性能,我的Winform應用程序應該直接建立與SQL Server數據庫的連接嗎?什麼是取捨?

是今天仍然如此,額外的驅動程序需要連接到Oracle數據庫或者是所有的,在.NET框架,現在我可以直接連接到連Oracle數據庫也一樣,如果我想?

另外,我發現,使用該鏈接服務器比創建兩個單獨的DB連接並一起合併數據慢。當我啓動了兩個a-sync查詢,然後將這些數據組合在一起時,我的最佳結果就出現了,就好像它是使用db鏈接返回的一個查詢一樣。但是,這導致維護問題,並且當我需要修改SQL在數據庫之間進行連接時,導致我對此方法感到後悔。

回答

4

我已經開發了幾年的企業應用程序,這使我認爲中間層(您的案例中的Web服務)總是有意義的,並且直接從用戶界面連接到數據庫始終是我的一個NO 。我不認爲你做出了錯誤的決定。從長遠來看,有一箇中間層確實很有意義。另請注意,您已構建的Web服務可以被不同的應用程序使用。

0

我認爲,如果你已經配置了Oracle服務器在您的SQL服務器的鏈接服務器不需要單獨的Oracle驅動程序。你可以使用你的SQL服務器作爲數據源。

嘗試創建存儲過程以獲得更快的結果。如果您使用SQL Management Studio,則可以檢查執行計劃以優化存儲過程(配置索引)。

我不認爲在這種情況下需要Webservices。

+0

通過Oracle通過SQL Server中的鏈接服務器連接會減慢我的查詢速度,但我同意我不需要Web服務器對Oracle數據庫執行查詢。 你說你不認爲我需要web服務換句話說,客戶端應該直接連接到數據庫。有什麼缺點嗎?我的情況不適用的一個缺點是我的應用程序可能在公司外部運行。防火牆如果Web服務放在它之外。 – ChadD 2009-08-02 20:34:49

1

我不知道你的性能要求,但一個wcf web服務是快速的。我看到有一箇中間層(您的Web服務)用於數據庫訪問沒有錯。這也是非常安全的。

+0

不知道什麼是WCF Web服務,我猜這是新一代的Web服務。但我認爲每個不必要的服務器跳躍的延遲加起來。 – ChadD 2009-08-02 20:37:54

+0

您已經構建了一個asmx Web服務?將其更改爲wcf(Windows通信框架)Web服務。快多了。用wcf你可以選擇通訊協議。 – tuinstoel 2009-08-02 20:42:35