web service在允許重用代碼的同時,可以重用代碼背后的數據。使用web service,再也不必像以前那樣,要先從第三方購買、安裝軟件組件,再從應用程序中調用這些組件;只需要直接調用遠端的web service就可以了。舉個例子,要在應用程序中確認用戶輸入的地址,只需把這個地址直接發送給相應的web service,這個web service 就會幫你查閱街道地址、城市、省區和郵政編碼等信息,確認這個地址是否在相應的郵政編碼區域。web service 的提供商可以按時間或使用次數來對這項服務進行收費。這樣的服務要通過組件重用來實現是不可能的,那樣的話你必須下載并安裝好包含街道地址、城市、省區和郵政編碼等信息的數據庫,而且這個數據庫還是不能實時更新的。
另一種軟件重用的情況是,把好幾個應用程序的功能集成起來。例如,要建立一個局域網上的門戶站點應用,讓用戶既可以查詢聯邦快遞包裹,查看股市行情,又可以管理自己的日程安排,還可以在線購買電影票。現在web上有很多應用程序供應商,都在其應用中實現了這些功能。一旦他們把這些功能都通過web service “暴露”出來,就可以非常容易地把所有這些功能都集成到你的門戶站點中,為用戶提供一個統一的、友好的界面。
將來,許多應用程序都會利用web service,把當前基于組件的應用程序結構擴展為組件/web service 的混合結構,可以在應用程序中使用第三方的web service 提供的功能,也可以把自己的應用程序功能通過web service 提供給別人。兩種情況下,都可以重用代碼和代碼背后的數據。
從以上論述可以看出,web service 在通過web進行互操作或遠程調用的時候是最有用的。不過,也有一些情況,web service根本不能帶來任何好處。
短處一: 單機應用程序 目前,企業和個人還使用著很多桌面應用程序。其中一些只需要與本機上的其它程序通信。在這種情況下,最好就不要用web service,只要用本地的api就可以了。com非常適合于在這種情況下工作,因為它既小又快。運行在同一臺服務器上的服務器軟件也是這樣。最好直接用com或其它本地的api來進行應用程序間的調用。當然web service 也能用在這些場合,但那樣不僅消耗太大,而且不會帶來任何好處。
短處二: 局域網的同構應用程序 在許多應用中,所有的程序都是用vb或vc開發的,都在windows平臺下使用com,都運行在同一個局域網上。例如,有兩個服務器應用程序需要相互通信,或者有一個win32或winform的客戶程序要連接局域網上另一個服務器的程序。在這些程序里,使用dcom會比soap/http有效得多。與此相類似,如果一個.net程序要連接到局域網上的另一個.net程序,應該使用.net remoting。有趣的是,在.net remoting中,也可以指定使用soap/http來進行web service 調用。不過最好還是直接通過tcp進行rpc調用,那樣會有效得多。
總之,只要從應用程序結構的角度看,有別的方法比web service 更有效、更可行,那就不要用web service。