2010-02-15 20 views
7

目標是構建一個服務,然後我將通過jQuery和基於標準的Web前端,移動設備「胖客戶端」來使用服務,而且很可能是WPF桌面應用程序。在.NET中開發一個新的RESTful Web服務 - 我應該從哪裏開始? ASP.NET-MVC,WCF?

好像WCF將是一個不錯的選擇,但我從來沒有建立一個RESTful服務使用WCF,所以我不知道在哪裏甚至開始對這種做法。

我在考慮是使用ASP.NET MVC,增加了一些定製路由另一種選擇,添加一些控制措施,並使用不同的意見,推動了JSON,XML和其它的返回類型。

這個項目主要是一個學習鍛鍊自己,我想花一些額外的時間和做「正確的」,所以我的部分是如何結合在一起的美好undertanding。

所以我的問題是這樣的,我應該使用哪種方法來建立這個RESTful服務,什麼都做這樣的一些優勢?

回答

8

通常情況下,我會說WCF是用於任何類型的託管服務,但在使用JSON作爲序列化機制的RESTful服務的特定情況下,我更喜歡ASP.NET MVC(我將其稱爲ASP.NET這個答案的其餘部分)。

其中一個原因是由於路由機制。在WCF中,你必須在契約上定義它,這是一切都很好,但如果你必須對你的路由進行快速的改變,從我的角度來看,使用ASP中的路由機制更容易。淨。如果你有多個服務暴露在WCF的多個接口中,很難獲得你的URL結構的完整圖像(這很重要),而在ASP.NET中你(通常)有所有的路線分配在一個地方。

關於ASP.NET的第二件事情是,你將不得不所有ASP.NET爲(請求,響應,服務器,等等等等),曝露出時是必不可少的已知內部對象的訪問特定於HTTP的端點(這是您正在創建的)。誠然,你可以在WCF中使用許多這些相同的東西,但你必須特別告訴WCF你正在這樣做,然後設計你的服務。

最後,通過親身體驗,我發現DataContractJsonSerializer不處理DateTimeOffset值太好了,這是你應該在DateTime與服務工作時(超過任何端點),使用它可以是類型被多個時區的人稱呼。在ASP.NET中,可以使用不同的序列化程序,或者如果需要,可以創建自己的ActionResult,它爲您使用自定義序列化程序。我個人比較喜歡JSON.Net serializer

一個關於JSON.Net串行和ASP.NET我喜歡的好處之一是,你可以使用匿名類型的吧,如果你很聰明。如果你在一個非泛型類型上創建一個靜態通用方法,然後委託給一個內部泛型類型,你可以使用類型推斷來輕鬆地爲你的序列化返回值使用匿名類型(假設它們是一次性的,當然,如果你有一個返回一致的結構,你應該定義它並使用它)。

還應該提到的是,如果開發RESTful服務,則不必完全折扣WCF。如果您要從您的服務中推送ATOM或RSS訂閱源,那麼System.ServiceModel.Syndication命名空間大規模中的類有助於構建和序列化這些訂閱源。創建ActionResult類的簡單子類以獲取SyndicationFeed的實例,然後在執行ActionResult時將其序列化爲輸出流非常簡單。

+1

我意識到它無關原來的問題,但是您能否詳細瞭解DateTimeOffset和您在JSON序列化中看到的問題? – Nate 2010-02-16 16:57:31

+0

@Nate:我建議把它作爲一個單獨的問題;測試你自己看到的差異,然後發佈一個關於你看到它們的區別的問題。 – casperOne 2011-05-23 14:12:28

1

就我個人而言,我對在WCF中實現REST服務並不興奮。我發現asp.net mvc框架是一個更自然的編程模型。

http://atomsite.net/的實現者最初在WCF中實現了atompub規範,然後使用asp.net mvc重寫了整個服務。他的經驗與我上面的評論相呼應,對於純粹的REST服務asp.net mvc是一條路。

唯一的例外是如果我想以平靜和非平靜的方式暴露服務。或者,如果我通過REST公開現有的WCF服務。

4

這裏有一個想法可以幫助你做出ASP.NET MVC和WCF之間的決定。在你描述的場景中,你是否期望需要使用HTTP以外的協議?

WCF被設計爲傳輸協議不可知的,因此它與ASP.NET非常不同。它具有渠道和綁定,消息,服務合同,數據合同和行爲。在構建分佈式應用程序時,它提供了很少的指導。它給你的是一個乾淨的平臺。

ASP.Net MVC自然是一個基於Http的框架。它處理HTTP動詞,媒體類型,URL,響應頭和請求頭。

問題是哪個模型更接近您正在嘗試構建的模型?

現在你提到了ReST。如果你真的想在ReST約束之後構建你的分佈式應用程序,那麼你最好從OpenRasta開始。它會引導你走下去。

您可以在ASP.Net MVC做休息,你可以在WCF做到這一點,但這些解決方案,你不會落入成功的坑;-)

+0

我從來沒有聽說過OpenRasta - 你有什麼額外的信息嗎?此外,HTTP和/或HTTPS將成爲唯一使用的協議,因爲我將在各種平臺上開發「客戶端」。 – Nate 2010-02-15 23:46:06

+0

你會在這裏找到主要的項目http://trac.caffeine-it.com/openrasta/sequenseb是該項目的主要開發人員,也是這裏的常客。如果你看看Mix10,OpenRasta的討論是REST類別下的唯一討論。http://live.visitmix.com/Sessions#/tags/REST – 2010-02-16 01:19:56

+0

對於一個真正簡單的項目,openrasta會比較像asp .net mvc?我對asp.net mvc和WCF都很滿意,而且我不確定在這一點上學習一個全新的框架/工具箱對我來說是有益的。思考? – Nate 2010-02-16 15:25:40

相關問題