簡體   English   中英

ASP.Net Web API與WCF,我應該在我的項目中選擇哪一個

[英]ASP.Net Web API vs WCF, which one should I choose in my project

到目前為止,我已經閱讀了很多關於WCF和ASP.Net web API之間差異的文章。 不幸的是,我無法清楚地知道什么能滿足我的目的。 我讀過的大多數文章都強調了兩個Web服務的設計觀點。 但我很困惑什么最適合我的項目,為什么? 這是我對該項目的簡要描述。

我需要在兩個服務器之間創建一個通信通道(兩者都是用C#編寫的)。 服務器將使用消息(某種類型的命令)進行通信。 消息有時只能是確認,有時消息可能包含進行某些計算的指令。 例如,一條消息可以繪制某些內容,或發送短信等。消息不一定涉及任何數據庫事務。 但是這些消息有時可以將大文本文件作為有效載荷發送(最大約1-5 MB)。 我相信WCF肯定會這樣做,但我可以用ASP.net web API做同樣的事情。 因為到目前為止我已經看到了ASP.Net web api的所有示例:它們適用於操縱某種DB存儲(GET,PUT,DELETE)的RESTful服務。 但在我的情況下,我將需要公開服務點

進行某種處理,例如返回計算值,發送和確認消息等。

不只是操縱數據庫存儲。

那么,最好和最簡單的方法應該是什么? 需要提到的是,我沒有找到使用ASP.Net web API實現此目的的任何直接示例。

您提出的問題是過於寬泛或主要以意見為基礎,很難為您所提出的問題舉例說明。

重點:

  • 首先,如果您要創建將在不同平台上使用的服務,那么請使用WCF。
  • 其次,如果您要創建將使用外部資源的 Internet服務,那么請使用Web API。
  • 如果要為低帶寬設備或移動設備創建服務以訪問客戶端,Web API是最佳選擇。與SOAP相比,HTTP請求/響應也更具可讀性,因為它包含標題,正文等,這使得它變得復雜。

只需幾分鍾時間閱讀以下文章,直到您完全了解一些原則。

原始來源可以在這里這里這里找到

在WCF或WEB API之間選擇誰:

  1. 如果要創建應支持特殊方案的服務(例如單向消息傳遞,消息隊列,雙工通信等),請選擇WCF。
  2. 如果要創建可在可用時使用快速傳輸通道的服務(例如TCP,命名管道,甚至UDP(在WCF 4.5中)),請選擇WCF,並且還希望在所有其他傳輸通道不可用時支持HTTP。
  3. 如果要通過HTTP創建可以使用HTTP的完整功能(如URI,請求/響應頭,緩存,版本控制,各種內容格式)的面向資源的服務,請選擇Web API。
  4. 如果要將服務公開給廣泛的客戶,包括瀏覽器,手機,iPhone和平板電腦,請選擇Web API。

為什么選擇Web API

  • Web API沒有像WCF REST服務那樣繁瑣而廣泛的配置。
  • 它非常簡單,使用Web API創建服務。 與使用WCF REST一樣,服務創建有點困難(需要清楚地了解配置)。
  • Web API僅基於HTTP和HTTPS,易於以REST完全方式定義,公開和使用。
  • Web API是輕量級架構,適用於智能手機等帶寬有限的設備。

我的意見:

  • 最簡單的方法 - Web API(因為你沒有任何這方面的例子)
  • 最難的方式是(配置) - WCF(最好使用WCF,因為你有例子)

我希望這能讓你明白選擇什么......

首先,RESTful是一種無狀態和統一的接口規范,可以應用於Web服務。 它不必是自動的,只有DB支持的普通舊CRUD服務。

在現實世界中,我們很難說所有Web REST API都完全遵循規范,事實上它們並不是大部分時間,尤其是無狀態部分。

對於基於消息的API,特別是如果它是雙向的和基於事件的,您可以使用websockets並考慮使用REST API來公開統一的無狀態Web界面來創建它們。 是的,你可以使用帶有ASP.NET WebApi的websockets,那里有很多教程,即使對於較新的ASP.NET Core也是如此。

“服務之間”交互部分與通常的Web瀏覽器<=> Web服務沒有什么不同,您只是為客戶端使用C#代碼而不是JS。

我很難推薦使用SOAP的WCF,因為考慮到現在的Web標准,它幾乎不可移植。 例如,如果想要使用瀏覽器客戶端而不是其他ASP.NET服務,那么您將不得不做額外的代碼客戶端來處理支持。

您可以使用WCF websockets ,提供WCF SOAP的幾乎所有優點。

tl;博士:

  • 您可以混合RESTful和Websockets,它實際上可能比完整的REST或完整的Websockets更好
  • 個人傾向於在websockets上使用SOAP,但考慮到你之后想要做什么,確實會帶來潛在的技術債務
  • 服務之間的消息API與服務和瀏覽器之間的消息API沒有什么不同

WebAPI不僅適用於RESTful Web服務。 您可以輕松地將請求發送到WebAPI控制器並以您希望的方式處理它:計算,發送消息,與CRM交互,與數據庫或其他任何內容交互。

創建WCF是為了管理基於SOAP的Web服務並帶來額外的復雜性。 它處理TCP,Mime ......

如果您只需要處理HTTP請求,最簡單的方法是使用WebAPI。

我建議使用Web API,如果它是用於RESTful服務的,因為WCF從未被用作Restful服務,盡管你可以作為Web API特別為此服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM