2008-10-15 101 views
32

使用Web服務通常是一種出色的架構方法。而且,隨着.NET中WCF的出現,它變得更好了。何時應該不使用Web服務?

但是,以我的經驗,有些人似乎認爲,Web服務應始終調用數據庫中的數據訪問層中使用。我不認爲網絡服務是通用的解決方案。

我正在考慮與幾十個用戶的小型Intranet應用程序。 Web應用程序及其Web服務部署到一個Web服務器,而不是Web場。未來將不會有另一個可以使用此特定Web服務的Web應用程序。在我看來,調用Web服務的成本不必要地增加了Web服務器的負擔。內部進程調用的性能受到影響。維護和調試Web應用程序和Web服務的代碼更爲複雜。部署也是如此。我只是沒有看到在這裏使用Web服務的優勢。

人們可以通過創建Web應用程序的兩個版本,有和沒有Web服務測試,並做壓力測試,但我沒有這樣做。

您對使用小型網絡應用程序的Web服務有意見嗎?任何其他場合,當Web服務不是一個好的建築選擇?

回答

33

Web服務是數據訪問的絕對可怕的選擇。幾乎沒有任何好處,這是一大堆開銷和複雜性。

如果您的應用程序要在一臺機器上運行,爲什麼否認它能夠執行進程內數據訪問調用?我不是在談論從你的UI代碼直接訪問數據庫,我談論的是抽象你的倉庫,但仍然包括他們的組件在你的正在運行的網站。

存在這樣的情況,我建議Web服務(和我假設你的意思是SOAP),但是這主要是針對互操作性。

服務的粒度在這裏也存在問題。 SOA意義上的服務將封裝操作或業務流程。數據訪問方法只是該過程的一部分。

換句話說:

- someService.SaveOrder(order); // <-- bad 
    // some other code for shipping, charging, emailing, etc 

    - someService.FulfillOrder(order); //<-- better 
    //the service encapsulates the entire process 

的Web服務的Web服務的緣故是不負責任的節目。

5

如果您只是爲您的Intranet編寫一個小型(少於50個用戶)的Web應用程序,那麼Web服務看起來有點矯枉過正。特別是如果它的主要功能(提供單點訪問許多服務)將不會被使用。

+0

小桌面應用程序呢? – WhoIsNinja 2011-02-15 16:32:45

2

對於小規模Web應用程序使用Web服務,獨立的業務層,數據層,等等等等可以矯枉過正(你要問的問題,「它會一直保持小規模有多大?」雖然) 。

在任何人拍攝了我,我不同意邏輯層之間的分離與單元測試,持續集成等人一起被血腥的輝煌。在我目前的角色中,我會完全迷失,在沒有他們的角落裏搖擺。然而,對於一個非常小規模的網絡應用程序,例如,用於跟蹤36名僱員的公司的聯繫電話號碼和地址,成本/收益分析表明,上面列出的所有「細節」都是過分的。

但是......請記住提問「它會一直保持小規模嗎?」 :-)

+0

Web服務無助於擴展(特別是在狀態滿足的情況下,它們可能會縮小規模) - 它們有助於集成。 – ddimitrov 2008-10-15 13:41:07

+0

是的,他們可能是一種痛苦,但要說他們沒有/不能幫助向外擴展是一個完全謬誤。您可以使用它們來分配業務邏輯模塊以分離硬件,以便您的Web服務器調用「n」個機器爲其工作。舉個例子。 – Rob 2008-10-15 13:48:26

+0

當然你可以......我只是不會因爲這個而使用它們。還有其他一些擴展方法,不要強迫你發佈一個嚴格的界面和XML序列化(即消息隊列,map-reduce,grids,tupple-spaces) – ddimitrov 2008-10-15 13:52:23

3

我同意,在一個小規模的Web應用程序使用Web服務增加了一層複雜性似乎並沒有道理的。我的大多數解決方案,互聯網和內聯網,10-50個用戶都不使用Web服務。我很高興別人也有同感......我以爲我是唯一一個。

6

只是因爲該工具生成一堆存根並不意味着它是一個很好的用法。 WS- *擅長於將服務暴露給外部各方。這意味着每個操作應該處於業務流程的粒度,而不是數據訪問。

許多標準可以用來詳細描述合同的不同方面,完全符合標準的WS堆棧可以消除第三方開發人員的很多痛苦,甚至允許使用虛構的點和點擊整合雅虎管道。藉助良好的治理控制,您可以根據需要發展公共界面並管理後向兼容性。

所有這些都不可能自動生成。 C#存根生成器只知道你的類的物理接口,但不瞭解涉及的語義。有關更詳細的討論,請參閱this paper

如果您正在建立一個網站,然後建立一個網站。如果您希望在應用程序內部使用異步消息傳遞,請使用MSMQ。如果要將數據公開給內部客戶端,請使用POX。如果您需要高效的二進制信息格式,請檢查Google的Protocol Buffers,或者如果您需要RPC檢查Hessian for C#或DCOM。

Web服務是一種粗粒度集成解決方案。他們是僵化的,他們比替代品慢,他們需要付出很大努力才能做好(如果做得不好,他們會毫無意義)。

總結:「何時應該使用網絡服務而不是?」 - 任何時候你可以擺脫沒有它

14

尼克·哈里森,在夏洛特輝煌的開發商,建議這些場景中使用Web服務是有道理的:

  • 在Web農場,在那裏有託管了多個Web服務器網站,所有網站都指向運行在另一個網絡服務器上的網絡服務。這允許通過多個服務器分配負載。
  • 客戶端/服務器,Windows窗體應用程序可以調用Web服務。
  • 跨平臺
  • 通過防火牆
3

通過爲小規模的網絡應用程序,我認爲使用Web服務通常是一個相當不錯的主意,你可以用它來輕鬆地從數據分離的Web服務器層。隨着直接的開發要求和優秀的工具,我沒有看到問題。

然而使用Web服務在以下情形:

  • 如果必須使用HTTP作爲數據的傳輸和XML序列化和需要大量數據的不同位,並同步經常。無論是REST還是SOAP還是WS- *都會遇到性能問題。您撥打的電話越多,您的系統就會越慢。如果你希望中等規模的數據塊不太頻繁,而且你可以使用直接的TcpIp(例如Wcf netTcpBinding),那麼你會更好。
  • 當需要查詢和與其他數據源的Web服務連接的數據,而激勵爲可與適當鞏固和合理化的數據來自全國各地的恩特普賴斯填充數據倉庫

這是我的經驗, 希望能幫助到你。

相關問題