如果想做一個分布式系統,肯定需要不同的機器來提供不同的服務,而有些基於http協議,有些tcp/ip協議,有些使用MSMQ通道,以往的技術實現起來比較容易,但是有一點是致命的:管理起來不方便。於是WCF順勢而出。但是使用一段時間后你會發現,你只是需要一點點,但是卻有一堆臃腫的東西在你服務器上,於是wcfrest和WebApi順勢而出(其實是很原始的技術,只是換了一個馬甲,重新封裝了一下)。基礎東西我就不介紹,主要說下實際應用的東西。
寫博客一段時間,偶然百度下自己寫的內容,發現各種爬蟲把自己碼的字都爬過去了。好吧,你贏了。此片博文特此感謝小藍同學。好基友你們懂的。
Interface的定義:
定義一個很簡單的方法,GetList。其實參數也可以使用這種方式:
那我為什么會選擇上面的一種定義方式呢?我把BucketMessage這個Model的內容通知給客戶端,每次請求都需要把這個Model全部參數傳遞上來。可能有人說這樣會增加http請求的內容,但是我認為這樣定義是為了所有接口的參數類型統一。至於你非要糾結那幾個字段和網速性能方面,我只能說呵呵。
方法的實現如下:
接下來是選擇Host的過程。剛開始我用IIS做宿主。於是,我果斷開啟苦比模式。
首先web.config的system.serviceModel節點:
參數說明:
AspNetCompatibilityEnabled:AppDomain(應用程序域)如果開啟ASP.NET的兼容模式,則為true.
HelpEnabled:如果 WCF幫助頁啟用 則true
對於配置文件的管理,我個人傾向於把Config文件夾統一放到一個根目錄,然后在服務器mklink.不明白的google。
然后在Global.asax中添加:
嗯,只是一個路由映射而已。
然后在配置文件中添加映射的配置:
如想對每個Request都執行Application_BeginRequest,那么必須要在system.web或system.webServer中的modules中加入
runAllManagedModulesForAllRequests="true"屬性.
iis啟動,訪問http://localhost:8080/Bucket/Bucket/GetList,調用,一切OK。
但是用IIS當host的一個不好地方就是當我把方法改成了Post以后,再次調用,要么找不到這個url,要么405,具體原因不明。調試一晚上無果,求大神告知。
於是換成了Winform當Host,正式上線后用Windows Service當Host。
Chrome下輸出:
Rest的好處在於輕巧和靈活,基於WebApi的規定。但是Rest只能用webHttpBinding綁定。