2009-02-09 110 views
2

以前我的ASP.NET Web應用程序連接到數據庫直接使用ADO.NET。現在我想將它更改爲3層,ASP.NET層,中間Web服務層和後端數據庫層。我覺得有益處,我可以抽象數據源到ASP.NET前層,鬆散耦合和降低潛在的安全風險,讓外部暴露ASP.Net Web應用程序,以便能夠直接訪問數據庫等ASP.NET Web應用程序的架構設計諮詢

相比2層架構與3層架構,我遇到了2個主要問題。

  1. 附加的中間web服務層將導致更多的流量,例如, ASP.NET不直接與數據庫交談,而是與Web服務通話,Web服務與數據庫交談,將導致更多流量。它會成爲瓶頸嗎?任何一般的建議,如果它是一個瓶頸解決這個問題?

  2. 因爲ASP.NET無法連接到數據庫,但連接到Web服務,它不能很容易地得到一個DataSet/DataTable對象。很難將表格數據提供給數據綁定控件。任何想法使ASP.NET中的表示層更容易編碼?

問候,
喬治

回答

8

如果你只認爲還有一個好處,你不應該這樣做。你在談論增加大量複雜性併爲自己工作,代價是性能,代碼簡單性和架構簡單性,對於......什麼?你有什麼收穫是值得這些成本的?

你:

  • 有需要從數據庫服務器斷開連接的web前端緊急安全相關的需求(不,不是假設的「我敢肯定,這將是更安全的」,但顯而易見的,不能被聰明你授予什麼DB權利ASP.NET應用程序)

  • 希望在某個時候完全交換數據層出未來(可能是多次)來解決具體的安全問題,因此需要絕緣您的網頁代碼庫來自激進的DB更改

在幾乎所有情況下,這些答案都是否定的。這樣做只會給自己和任何可能觸及此應用程序的人增加痛苦。

+0

+1 - 如果不需要體系結構就可以獲得,請使用該努力使您的前端更好,而不是添加圖層 – Brandon 2009-02-09 03:24:42

+0

+1 - 絕對同意這一點。看起來OP會爲himeself頭痛。 – nickohrn 2009-02-09 03:49:01

+0

雷克斯,你是什麼意思「有迫切的安全需要完全斷開數據庫服務器從Web前端」?換句話說呢? – George2 2009-02-09 04:56:34

1

關於你的問題#2 - 你可以肯定從Web服務返回的數據集。 http://tinyurl.com/ah58xc

但是,也許更好的選擇是簡單地重構您的應用程序,而不是使其成爲一個多層。例如,將「數據訪問」分隔爲您從ASP.NET項目引用的單獨的類庫項目。這可以使事情更有條理,並可能完成一些你想要用多層體系結構做的事情。

順便說一句,在建立多層次的時候,你不一定需要他們最大的危險是,你最終建立「代理」的代碼,因爲沒有更好的術語。也就是說,除了用相同的參數調用「真實」後端方法以外,沒有任何其他用途的方法。這種感覺起初更好,因爲你有一個乾淨的圖層分離,但會導致維護問題,例如,爲參數添加方法,你必須添加它3次(後端,代理層和表示層)。

0

我的第一個問題是:爲什麼中間的Web服務?如果這一切都將在同一臺物理機器上運行,那麼您可能需要重構通過一組接口使用並使用直接方法調用的中間層。

我正在研究與中間層Web服務分離的體系結構,但它包含所有公司的關鍵業務邏輯,並且不會直接暴露給互聯網。例如:

{internet} - > | DMZ | - > Web服務器 - > | Firewalled LAN | - >應用程序服務器 - >數據庫服務器

在這種情況下,我認爲它增加了一層安全性,因爲關鍵任務不在DMZ上。儘管它在技術上違反了一些安全問題,因爲Web服務器可以聯繫應用程序服務器,但是通過單個端口將應用程序服務器暴露給DMZ中的特定IP要比將其暴露給互聯網更好。

如果你打算使用WCF在服務器之間進行通信,我會建議使用類似於TCP而不是SOAP的二進制序列化。這應該表現更好(隨意設置快速測試)。我自己並沒有嘗試過,但WCF可能能夠通過電線序列化數據集或表格。請參閱here