WCF vs ASP.NET Web API [終了]


484

WCFの背後にある概念を理解するために数か月を費やしてきましたが、最近、初めてのWCFサービスアプリケーションを開発しました。

設定ファイルのすべての設定を理解するのにかなり苦労しました。
私は環境について確信していませんが、あなたはそれで驚くべきことをすることができるようです。

先日、マイクロソフトがASP.NET Web APIと呼ばれる新しいものを発表したことを知りました。

私が読むことができるのは、RESTfulフレームワークであり、非常に使いやすく、実装も簡単です。

今、私は2つのフレームワークの主な違いは何か、そして古い WCFサービスアプリケーションを新しいAPIで変換する必要があるかどうかを理解しようとしています。

誰かが、それぞれの違いと使い方を理解するのを助けてくれませんか?


12
興味深い質問を1つ。多分あなたはprogrammers.stackexchange.comで
Mithir

1
「古い」WCFのどの機能を使用していますか?RESTful APIを構築しようとしていますか?またはRPC、またはSOAP?
12

1
@marcind:回答ありがとうございます。これは主にRESTfulな呼び出しです。RPCはまったくありません。
LeftyX

4
別の良い答えは、stackoverflow.com

1
どちらも同じものですが、遭遇する可能性がある古い違いは、wcfが基本的にイントラネット用であり、Webapiがインターネット用であることです。もちろん、wcfを安らかにすることもできます。基本的に両方ともhttpプロトコルweb.httpで実行されています
LostCoder

回答:


185

新しいASP.NET Web APIは、以前のWCF Web APIプロジェクトの続きです(ただし、一部の概念は変更されています)。

WCFはもともとSOAPベースのサービスを有効にするために作成されました。より単純なRESTfulサービスまたはRPCishサービス(jQueryのようなクライアントと考えてください)の場合は、ASP.NET Web APIを選択することをお勧めします。


36
また、WCFはRESTスタイルのサービスを作成するためのいくつかのサポートを提供しますが、ASP.NET Web APIでのRESTのサポートはより完全であり、将来のREST機能の改善はすべてASP.NET Web API msdn.microsoft.com/en-で
Ohad Schneider

6
実際、WCFはもともとSOAPまたはRPCサービスとクライアントの間に抽象化レイヤーを実装するために作成されました。ポイントは、これらの非常に異なる呼び出しの周りに単一のアーキテクチャ(ABC)を作成し、構成ファイルを介して配管を処理することでした。
Scott Marcus

4
ASP.NET Web APIの実際の欠点は、それがクライアントツールであることです。Visual Studioは、シームレスなWCFサービスクライアントエンティティとサービス生成をサポートする統合ツールをサポートしています。Web APIではサポートされていません。HttpClientどれが素晴らしいのか知っていますが、エンティティの生成とシリアライゼーション/デシリアライゼーションは処理しません。
Shimmy Weitzhandler 2017

1
@Shimmy swaggerを使用したサービス生成についてはどうですか?
Alex78191

1
@ Alex78191ご回答ありがとうございます。生成されたエンティティはINotifyPropertyChangedクライアントエンティティを発行できますか?検証はどうですか?
Shimmy Weitzhandler 2018

250

私たちの場合、WCFはSOAPとWeb API for RESTに使用されています。Web APIがSOAPもサポートしたいと思います。WCFの高度な機能は使用していません。これはMSDNからの比較です:

ここに画像の説明を入力してください


1
また、Web APIは、CSOMにとっては天の恵みであるODataをサポートしてます
abbaf33f 2015年

12
MSがこれほどまでに多くのことを言っても、本当に価値のあるものは何もありません。たとえば、WCFはJSONをサポートしますが、この情報はこの「比較」では十分に隠されていますが、WebApiはJSONを1回ではなく2回サポートすることをテキストで述べています。
magallanes 2016年

1
この表は無意味です。"JQuery"(大文字のJの恐怖引用)はプロトコルまたはフォーマット、あるいはその両方ですか?
hyankov

1
面白い。MSDNでは、トランスポートプロトコルとしてHTTPについて言及しているのは誤りです。HTTPはアプリケーション層プロトコルです。
RayLoveless、2018年

80

ASP.net Web APIはすべて、HTTPおよびRESTベースのGET、POST、PUT、DELETEに関するものであり、よく知られているASP.net MVCスタイルのプログラミングとJSONリターナブルです。Web APIは、すべての軽量プロセスと純粋なHTTPベースのコンポーネント用です。単純な、または最も単純な単一のWebサービスであっても、WCFを進めるには、余分な手荷物がすべて必要になります。ajaxまたは動的呼び出しのための軽量のシンプルなサービスの場合、WebApiは常にニーズを解決します。これは、ASP.net MVCを適切に補完または並行して支援します。

ポッドキャストをチェックしてください:Hanselminutes Podcast 264-これはお父さんのWCFではありません-詳細については、Scott HanselmanによるGlenn Blockを使用たWebAPIに関するすべて


67

以下のシナリオでは、WCFを使用する必要があります。

  1. TCP、MSMQ、MIMEなどのプロトコルでデータを送信する必要がある場合
  2. 消費側クライアントがSOAPメッセージの消費方法を知っている場合

WEB APIは、RESTful / HTTPサービスを開発するためのフレームワークです。

ブラウザやHTML5のようにSOAPを理解しないクライアントは非常に多く、その場合はWEB APIが適しています。

HTTPサービスヘッダーは、サービスを保護する方法、情報をキャッシュする方法、メッセージ本文のタイプを指定します。HTTP本文では、SOAPサービスとしてのXMLだけでなく、HTMLなどの任意のタイプのコンテンツを指定できます。


7
これは、WCFがSOAPメッセージのみを処理することを前提としていますが、これは誤った前提です。WCFサービスでRESTエンドポイントを公開することもできます。WCFの機能(tridyのメッセージを参照)を使用しない場合は、Web APIが意味をなすように変更します。
マイク

3
はい、WCFもRestを実行します。基本的にWeb APIは、単純なCRUDスタイルのデータアプリを実行する場合に適切なWCF機能のサブセットです。
user1496062 2015

41

これまで両方を使用して以来、WCFとWeb APIの間に多くの違いを発見しました。どちらのテクノロジースタックもさまざまなシナリオに適しているため、どちらが優れているかは言えません。これは構成とシナリオによって異なります。

Properties              ASP.Net Web API                         WCF
--------------------------------------------------------------------------------------------------
End point (mainly)      Http based                              SOAP based
Service Type            Front End                               Back-end
Support                 caching, compression, versioning        No
Framework               ASP.net                                 WCF
Orientation             Resource Oriented                       Service Oriented
Transports              http                                    http, tcp, MSMQ, Named pipe
Message pattern         Request reply                           request Reply, one way, duplex
Configuration overhead  Less                                    Much
Security                lesser than WCF (web standard security) Very high (WS-I standard)
Hosting                 IIS                                     IIS, Windows Service, Self hosting
Performance             Fast                                    A bit slower than Web API
In use from             .NET 4.0                                .NET 3.5

注:データは私の見解だけでなく、他の公式Webサイトからも収集されます。


12
WebサービスAPIは、Windowsホストサービスと同様に、セルフホスト(Owin / Katana)することもできます
Monis Iqbal

HTMLの代わりに画像を使用してテーブルを作成する場合、マイナス1。これは、改善のために回答を編集できないためです。
Ahsan Ahmed

34

WCFは、箱から出してたくさんのことをあなたに与えるでしょう、それは何にも匹敵しさえしません。(いくつか例を挙げると)認証、承認、暗号化、キューイング、スロットル、信頼性のあるメッセージング、ロギング、セッションなどの独自の実装を実行する場合を除きます。WCFはWebサービスではありません。WCFはSOAの開発プラットフォームです。


11
私が間違っていないのであれば、WEB APIはリストされているほとんどの機能も提供していると思います。
Alex

4
これらの機能を提供しない、または非常に単純なバージョンを提供するWeb APIはありません。
user1496062 2015

3
まあそれは何ですか-それはそれらを提供するかどうか?

5
認証と承認については、asp.net / web-api / overview / security /…を確認してください。tl; dr:IISで確実にサポートします。暗号化については、おそらくSSLを使用する必要があります。ASP.NETはキューイングを自然に処理します(ただし、利用可能なワーカースレッドと受信リクエストに基づいてまっすぐです)。セッションが存在します(ただし、セッションを直接使用することはお勧めしません)。ログは簡単に設定できます(ActionFiltersなどを使用)。信頼できるメッセージングの代替手段は、SignalRを使用することです(正確ではありません)。
James Haug、2015年

7
「何にも匹敵しない」??ありそうもない。
bbsimonbb 2016

16

なぜ私が答えているのですか?

これら2つのテクノロジーの違いを理解するのに、かなりの時間を費やしました。「この答えを探して迷っていたときにこれらのポイントがあった場合、必要なテクノロジーを選択することを非常に早く決定した」と私が思うこれらすべてのポイントをここに置きます。

情報源:

Microsoft®VisualStudio®2015の解放

ISBN-13:978-0-672-33736-9 ISBN-10:0-672-33736-3

ASP.NET Web APIとWCFが選ばれる理由:

ASP.NET Web APIとWCFのテクノロジーを比較する前に、Webサービスの作成には実際にはREST(Representational State Transfer)とSOAP / WSDLの2つのスタイル/標準があることを理解することが重要です。SOAP / WSDLは、Webサービスが構築される元の標準でした。ただし、使用が難しく、XMLなどのメッセージフォーマットが大きく、パフォーマンスが低下していました。RESTベースのサービスはすぐに代替手段となりました。HTTPの基本構成(GET、POST、PUT、DELETE)を利用し、通常はより小さなメッセージ形式(JSONなど)を使用するため、記述が簡単です。その結果、RESTベースのHTTPサービスは、Webを厳密に対象とするサービスを作成するための標準になりました。

ASP.NET Web APIの目的を定義しましょう

ASP.NET Web APIは、RESTベースのHTTP Webサービスを開発するためのMicrosoftのテクノロジーです。(SOAP / WSDLに基づいていたMicrosoftのASMXがずっと前に置き換えられました。)Web APIを使用すると、すべてのブラウザーとネイティブデバイスが理解できるHTTPプロトコルに基づく堅牢なサービスを簡単に作成できます。これにより、アプリケーションをサポートするサービスを作成し、他のWebアプリケーション、タブレット、携帯電話、PC、ゲームコンソールからそれらを呼び出すことができます。今日存在するWeb接続を活用するために今日作成されたアプリケーションの大部分は、何らかの方法でHTTPサービスを使用しています。

WCFの目的を定義しましょう。

インターネットを介して通信することは、常に最も効率的な手段であるとは限りません。たとえば、クライアントとサービスの両方が同じテクノロジ(または同じマシン)に存在する場合、それらは多くの場合、より効率的な通信手段(TCP / IPなど)をネゴシエートできます。サービス開発者は、回避しようとしていた同じ選択をすることに気づきました。今では、効率的な内部サービスを作成するか、インターネット経由で幅広いアクセスを提供できるようにするかを選択する必要があります。また、両方をサポートする必要がある場合は、サービスに複数のバージョンを作成するか、サービスにアクセスするために少なくとも個別のプロキシを作成する必要があります。これはマイクロソフトがWCFで解決した問題ですです。

WCFを使用すると、境界を気にすることなくサービスを作成できます。その後、呼び出し元のクライアントに応じて、サービスを最も効率的な方法で実行することをWCFに任せることができます。このタスクを管理するために、WCFはエンドポイントの概念を使用します。サービスに複数のエンドポイントがある場合があります(設計時または展開後に構成されます)。各エンドポイントは、サービスが呼び出し元クライアントをどのようにサポートするかを示します。Web経由、リモート経由、Microsoft Message Queuing(MSMQ)など。WCFを使用すると、サービス機能の作成に集中できます。呼び出し側のクライアントと最も効率的に話す方法が心配です。このようにして、単一のWCFサービスでさまざまな種類のクライアントを効率的にサポートできます。

WCFの例:

例を考えてみましょう:

顧客データはアプリケーション間で共有されます。各アプリケーションは異なるプラットフォームで作成され、異なる場所に存在する場合があります。共有された顧客データへの共通アクセスを提供するWCFサービスに顧客インターフェイスを抽出できます。これにより、データが一元化され、重複が削減され、同期が排除され、管理が簡素化されます。さらに、WCFを使用することにより、呼び出し側クライアントにとって意味のある方法で機能するようにサービスエンドポイントを構成できます。図は、WCFサービスで顧客データに一元的にアクセスする前の例を示しています。

これは、WCFがさまざまなクライアントにサービスを提供する方法です。

結論:

i)Web APIを選択するタイミング:

ASP.NET Web APIを使用して作成されたようなRESTベースのHTTPサービスが、Webサービスを構築するための標準になったことは否定できません。これらのサービスは、サービスを構築するWeb開発者に簡単でわかりやすいアプローチを提供します。Web開発者はHTTP GETおよびPOSTを理解しているため、これらのタイプのサービスに適切に適応します。したがって、厳密にHTTPを対象とするサービスを作成している場合、ASP.NET Web APIが最適です。

ii)WCFを選択するタイミング:

WCFテクノロジは、さまざまなプロトコルとメッセージ形式に基づいて複数のサービスエンドポイントをサポートする必要がある場合に役立ちます。Microsoft BizTalkなどの製品は、WCFを利用して、Web経由でも、さまざまなマシン間構成経由でも使用できる堅牢なサービスを作成します。ただし、ローカルに接続したときにTCP / IPを介して通信するアプリケーションを作成する必要がある場合ネットワークとネットワークの外でHTTPを介して動作する場合、WCFがあなたの答えです。

警告する:

Web開発者は、WCFを開発するのがより困難で複雑であると見なすことがよくあります。したがって、マルチプロトコルサービスの必要性が予測できない場合は、ASP.NET Web APIを使用することになるでしょう。


1
複数の質問に同じ回答を追加しないでください。十分な評判を得たら、最高の1つに答え、残りを重複としてフラグを立てます。重複していない場合は、質問に合わせて投稿を調整し、削除のフラグを立てます。
Bhargav Rao

12

これについてはMSDNに比較があります

WCFおよびASP.NET Web API

私にとって、選択はクライアントが誰で、どこにいるのかということでした。

社内ネットワークおよび.NETベースのクライアント: TCPバインディングでWCFを使用(HTTPより高速な通信)

社外のネットワークで、PHP、Pythonなどの多様なテクノロジーを使用する:RESTでWeb APIを使用する


9

ビジネスといえば、WebApiにはWSDLがないため、開発者はすべて手動で文書化する必要があります。たとえば、WebApi操作がオブジェクトのリストを返す場合、クライアントはオブジェクトを手動で作成する必要があります。つまり、WebAPIは実際に定義のエラーを起こしやすいです。

Webapiの長所は、WCFよりも軽量です。


3
WCF == WS
BozoJoe

7

「WebApiにはWSDLがありません」というステートメントに関して、Restクライアントを生成する方法はいくつかあります。人気のあるアプローチの1つは、Swagger UI /(Swashbukkle Nuget)です。これにより、RESTエンドポイントの入出力スキーマを理解するための豊富なインターフェースと、エンドポイントをテストするためのオンラインツールが提供されます。

JSON LD(Json Linked Documents)は、より良いセマンティクスでJSONスキーマを公開することにより、JSONベースのREST開発者エクスペリエンスをさらに改善するもう1つの新しい標準です。


1

wcfを使用すると、tcp、httpなどの複数のエンドポイントに対して同じサービスサポートを構成して公開できます。サービスをhttpベースのみにしたい場合は、Web APIを使用する方が適切です。Web APIは、wcfに比べて構成が非常に少なく、wcfよりも少し高速です。Wcfは休息サービスもサポートします。.Net framework 3.5の制限がある場合、オプションはwcfです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.