以WCF來開發RESTful風格的服務
http://www.studyhost.com/Eshop/Products/Nokia5130
上面這串網址可表示一個產品資料表中的產品,產品名稱為Nokia5130,若我們想取得資料,可透過HTTP GET方法,以上述網址來取得。
若我們想刪除這個資料,則一樣是上面這串網址,但是對IIS伺服器送出的動作則是HTTP DELETE。如果我們想建立一筆新的資料,則可透過HTTP POST方法,至於要修改,則透過HTTP PUT方法。
也就是說,描述資源是透過Uri,而對資源要進行的動作,則是透過HTTP verb來進行。有了這樣的觀念之後,我們就可以開始嘗試建議建立RESTful的 WCF服務。我們建立出的WCF服務,只需要遵循上述的 REST風格,即可讓所有的開發人員存取。
一直說REST風格而不說REST規格,主要的原因是REST並非是一種哪一個機構或是協會設計出來的規格,由於架構簡單,它僅僅是一種設計風格,就是兩個要點,用Uri來描述資源位置,用四種Http Verbs(包含GET, POST, DELETE, PUT)來決定對這個資源要進行的動作,甚至當我們用調用某一個RESTful的服務時,該服務回傳的資料也沒有一定要以XML型別回傳,也可以是單純的文字或是HTML。總而言之,它就是簡單導向。
而HTTP Verbs到底是什麼呢?這對於絕大部分時間僅僅使用瀏覽器的開發人員來說,可能有點陌生,HTTP Verbs是HTTP協議定義出的規格,HTTP共有八種動作,包含:HEAD, GET, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT,過去我們常用且熟悉的應該是HTTP GET和HTTP POST,當你在瀏覽器上輸入一個網址,對於IIS伺服器下的指令其實就是HTTP GET,而當你在瀏覽器上按下某一個Submit按鈕(或是ASP.NET的postback),其實就是對瀏覽器下HTTP POST指令。
實際建立RESTful的WCF服務
由於.NET 3.5的支援,我們可以透過相當簡單的方式來建立RESTful的WCF服務,若開發人員想透過WCF技術,來開發RESTful的Service,只需要在VS2008 SP1的專案範本中,選擇AJAX-enabled WCF Service即可:
接著,您會看到底下的程式碼:
如果您將最上面註解的『WebGet()
不過要讓這個服務能夠正式運行之前,我們必須針對Web.Config作一些調整,請把
另外,請開啟RESTfulWCF.svc檔案,在.svc頁面的網頁前置詞當中,加入『Factory="System.ServiceModel.Activation.WebServiceHostFactory"』,如此一來,這個RESTful服務才能夠正常運行:
有了這些概念之後,我們立刻來嘗試建立一個簡單的例子,請建立一個GetData Method,該Method具有一個參數Name,接著在Method上,加入WebGet修飾字,給定UriTemplate即可,相當的簡單:
UriTemplate是指這一個RESTful服務的呼叫方式(嚴格說起來是描述該資源的Uri位置),是要以何種Uri來表達,透過這種方式建立出來的WCF服務,就直接支援了REST型態的遠端呼叫方式。
例如,上例中我們給定的『UriTemplate』是"User/{name}",則這個資源可以透過底下的網址來取得:
http://localhost:56712/RESTfulWCF.svc/user/david
其中的『david』是UriTemplate中的{name}參數,而這個參數可透過我們定義在GetData()中的name參數取得,目前我們在GetData()中僅是將這個參數加上一些文字然後回傳,表示回應了用戶端對資料的呼叫,而呈現出的結果如下圖。我們可以在瀏覽器上直接以HTTP GET來測試:
很簡單的,就建立了一個RESTful的服務。
留言
http://oreilly.com/catalog/9780596519209/
感覺像微軟將來的 ADO.NET Data Services
thx, 我改天找來看看^_^
===========================
[WebMethod]
public void getLiveView()
{
...
while (DateTime.Now < playEndTime)
{
byte[] frame = getOneFrame();
Context.Response.BinaryWrite(frame);
Context.Response.Flush();
Thread.Sleep(100);
}
...
}
===========================
但是在REST WCF中卻沒有相對應的方式,
WebOperationContext.Current.OutgoingResponse無法BinaryWrite與Flush,
請問在REST WCF中有類似的方式嗎?
微軟官方 689 頁, 全文 pdf 電子檔下載:
http://www.codeplex.com/WCFSecurityGuide
線上版:
http://msdn.microsoft.com/en-us/library/cc949034.aspx
其他相關文件:
http://www.cnblogs.com/wayfarer/archive/2009/02/14/1390556.html
http://blogs.msdn.com/jmeier/archive/2009/02/11/new-release-patterns-practices-wcf-security-guide.aspx
http://blogs.msdn.com/jmeier/default.aspx (作者本人)
微軟 WCF 3.5 官方教材 (適合第一次學 WCF 的人):
http://tlsj.tenlong.com.tw/WebModule/BookSearch/bookSearchViewAction.do?isbn=0735625654&sid=46569
-----------------------------------
傻瓜也能在 24 小時學會 WF, Windows Workflow Foundation (照書上一步步照做即可):
Sams Teach Yourself Windows Workflow Foundation in 24 Hours
http://tlsj.tenlong.com.tw/WebModule/BookSearch/bookSearchViewAction.do?isbn=0321486994&sid=48858
WF 簡體線上教材,一步步照做即可:
http://www.cnblogs.com/carysun/archive/2008/04/04/WFHelloWorld.html
-----------------------------------
thank u
其實我們就可以直接透過 網址取得資料了?