2009-10-17 98 views
1

有沒有人對將客戶端連接到SQL Server以獲取數據的最佳方式有任何意見。客戶端通過Internet訪問SQL Server

所以可以說我有一個C#中的DataGridView不是內部網絡上的WinForm的,我需要用大量的數據加載它。

目前訪問我們在打開一個與SQL服務器的連接,客戶端調用組件SqlDataAdapter的數據,加載一個DataSet,然後關閉數據庫連接。這是使用SQL Server身份驗證,並有許多應用程序在同一時間以相同方式連接到互聯網上。

所以我想提高安全性,不降低性能。我應該看看哪些選項或其他選項?

- 連接方式相同,但保持連接打開的應用程序用戶的持續時間。

- 創建WebServices服務器並將數據集或集合傳遞給客戶端。

- 創建WCF服務器並連接到數據庫。 (LINQ,Identify Framework,ADO.NET ...?)

- 同時創建WebServices和WCF服務器,客戶端連接到WCF,WCF從連接到SQL Server的WSE服務器獲取數據並將集合或數據集傳遞迴客戶端

就我個人而言,我最喜歡最後的選擇有幾個原因。 1.很容易將我們已經構建的組件放到Web服務中。 2.它可以讓我們停止讓我們的ASP.NET網站直接訪問數據庫,但通過Web服務器(ASMX到ASMX =好?)連接。 3.我們可以更好地控制訪問哪些數據並將其提供給我們的網絡之外。我們不再需要在應用程序中保留連接字符串。

有沒有人有這些經驗或這些選項的組合?我有些謹慎,因爲我聽說過像這樣的服務器的恐怖故事是漏斗點,當沒有問題直接連接到SQL Server時。

感謝

傑森·斯通

-

回答

3

在我看來,你需要一個非常有說服力的理由,以允許從您的網絡外部數據庫的直接連接。如果不正確,允許遠程Sql連接可能會帶來很大的安全風險。業內人士瞭解到這與而SQL Slammer病毒等艱辛的道路......

的WinForms/WPF客戶端應用程序 - > WCF - >數據庫的作品真的很好在現實世界中。此外,只要數據形狀來回傳遞保持不變,隱藏訪問遠程應用程序服務後面的數據就可以更改數據庫和相關對象,而無需更改任何客戶端。

在另一面,有從一個邏輯實例成爲很多併發用戶的任何應用程序(如Web應用程序/網站去)應直接連接到數據庫。

在任何一種情況下,我實在看不出有另一套網絡服務,從您的WCF和Web應用程序隱藏數據庫,除非我們是在談論一個巨大的不同企業系統的價值。

+0

我們已經有了我們的Web服務的Intranet應用程序和我們的外部的WinForms已經有很好的組件組織所有的數據訪問。因此,在我的測試示例中,我有一個Web服務項目的所有數據訪問權限,然後在我的wcf應用程序中添加作爲Web引用的Web客戶端,然後在客戶端中添加WCF服務器作爲服務客戶端。我有點像抽象的數據訪問層,然後是安全層(WCF)。我們也可能讓WCF在客戶端運行其他例程。我只是不想這樣做,如果它會放慢速度。 – JasonBlackwoodStone 2009-10-17 21:16:57

+0

如果WCF到WS呼叫位於同一個網絡/ Intranet上,它將引入一個微小的perf命中(毫秒)。最大的開銷可能是通過網絡發送soap,而不是他們以前對數據庫的tcp連接。我想說,如果不是每次打電話的話,你至少會介紹十分之一秒。對於大多數數據錄入應用程序,它不會是客戶會注意到的。如果這是一個在線視頻遊戲,它將是顯而易見的。 – 2009-10-17 21:54:45

1

@Auger表示,再加上,通過HTTPS獲得SSL證書和服務器的一切。這樣它的安全性和它由IIS處理的低級別,所以你知道你獲得了最好的性能。

+0

我的經理對SSL有些猶豫。他的觀點是它會減慢速度。我不能自己說。我還沒有注意到我自己的很大不同。 – JasonBlackwoodStone 2009-10-17 20:58:51

+0

有開銷 - 這是肯定的。然而,你的老闆是錯誤的,這是不夠的被看到。不要害怕,前進。就像性能下降5倍時,它是1納秒,現在是5納秒。你永遠不會看到差異。我保證數據庫將成爲您的瓶頸,而不是SSL。 – AngryHacker 2009-10-18 06:34:39

2

您是否簽出ADO.NET DataServices(以前稱爲代號「Astoria」)?

這是一種在WCF基礎上構建的WCF技術,它具有WCF的所有優點,可以讓您很容易地(但選擇性地和安全地)公開數據模型(通常是ADO.NET實體框架模型,但是Linq- SQL或其他技術也可以工作)作爲互聯網的RESTful服務。

您可以完全控制數據庫的哪些部分實際在模型中表示,然後您可以在模型中擁有各種訪問級別 - 您可以允許讀取集合(例如,讀取所有產品的列表),或者只需閱讀個別項目,甚至是更新,插入或刪除等內容 - 都在您的掌控之下。

使用REST界面,使用它只需瀏覽給定的URL,然後在該模型中進行下鑽或鏈接。

還有一個客戶端API可供使用,因此您可以輕鬆快速地顯示數據並在數據中提供用戶導航。你一定要去看看Mike Flasko和Developing Applications Using Data Services的PDC08談話,還有Pablo Castro的Offline-Enabled Data Services and Desktop Applications

絕對是一個好主意,並且是一種非常快速且安全的方式,可將您的數據上傳到互聯網!一探究竟。

馬克

+0

看起來很有趣。我不確定我們是否真的要重寫迄今爲止所做的一切。如果我們只需將所有組件拖放到Web服務中,客戶端就不需要改變它們的工作方式,只需添加服務引用並從組件名稱中將全部替換爲服務名稱即可。可能是一個好主意,但我認爲現在對WCF的改變是一個足夠大的改變。之後我們可以轉向本週的數據訪問。我確信只要在那一天到來,WCF就會幫助你。 – JasonBlackwoodStone 2009-10-18 01:24:51

+0

同意 - 在這種情況下,我肯定會推薦使用WCF(不要在ASMX或其他棄用技術上投入時間和精力),我會嘗試將您的數據集更改爲列表,其中您使用的實體被定義爲WCF數據合同。這使得WCF中最清晰的數據傳輸 - 不要推薦序列化DataSet - **。 – 2009-10-18 10:54:23

+0

列表會很好,但我們的程序現在都使用數據庫中的大量數據。創建列表所有這些將是一場噩夢。現在,如果我們想向DataGridView添加新數據,那麼我們只需將該項添加到SQL存儲過程中的select語句中即可,並且它將顯示在datagridview的UI中。是的,它不會像數據網格中的其他列一樣漂亮,因爲它沒有被定義爲datagridview中的列,但是如果我們需要在下一個版本之前不釋放代碼,那麼我們可以在那裏獲取數據。 – JasonBlackwoodStone 2009-10-18 16:00:14

相關問題