web-dev-qa-db-ja.com

WCFとASP.NET Web API

私は数ヶ月かけてWCFの背後にある概念を把握しようとしましたが、最近私は最初のWCFサービスアプリケーションを開発しました。

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

先日、マイクロソフトが ASP.NET Web API という新しい機能を追加したことを知りました。

私が読むことができるもののためにそれは RESTfulフレームワーク 、非常に使いやすくそして実行することです。

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

誰かが、それぞれの違いと使い方を理解するのを手伝ってくれませんか。

463
LeftyX

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

WCFは当初、SOAPベースのサービスを有効にするために作成されました。よりシンプルなRESTfulまたはRPCishサービス(jQueryのようなクライアントだと思う)には、ASP.NET Web APIをお勧めします。

174
marcind

私たちにとって、WCFはSOAPとREST用のWeb APIに使用されます。 Web APIもSOAPもサポートしてほしいのですが。 WCFの高度な機能は使用していません。これが _ msdn _ との比較です。

enter image description here

239
Manish Jain

ASP.net Web APIは、HTTPとRESTベースのGET、POST、PUT、DELETE、およびASP.NET MVCのプログラミングスタイルとJSONのリターナブルについてのすべてです。 Web APIは、すべての軽量プロセスおよび純粋なHTTPベースのコンポーネント用です。シンプルまたはシンプルなシングルWebサービスでもWCFを利用するには、余分な手荷物がすべて必要になります。 Ajaxまたは動的呼び出しのための軽量でシンプルなサービスのためには、常にWebApiがニーズを解決するだけです。これは、ASP.net MVCと並行して、きちんと補完または補完します。

podcastをチェックしてください:Hanselminutes Podcast 264 - これはあなたのお父さんのWCFではありません - Glenn Blockを使ったWebAPIについてのすべて Scott Hanselmanによる、より多くの情報。

79
Naveen Vijay

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

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

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

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

HTTPサービスヘッダーは、サービスの保護方法、情報のキャッシュ方法、メッセージ本文の種類、およびHTTP本文は、XMLのようにSOAPサービスとしてHTMLのようなあらゆる種類のコンテンツを指定できます。

65
Kris

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

See this image to understand more differnce

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

35
Rajput

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

33
tridy

これについてはMSDNで比較されています

WCFとASP.NET Web API

私にとって、選択はクライアントが誰であるか、そして彼らはどこにいますか?

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

社外ネットワーク、そしてPHP、Pythonなどのような多様な技術を使う :RESTでWeb APIを使う

11
Arshad Mohammad

私が答えている理由:

私はこれら二つの技術の違いを理解するのに多大な時間をかけました。私は、この答えを探して疑問に思っていた時にこれらのポイントを持っていたのであれば、必要なテクノロジを選択することをもっと早く決めたと思います。

情報源:

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サービスを作成するための実際には2つのスタイル/標準、REST(Representational State Transfer)とSOAP/WSDLがあることを理解することが重要です。 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のテクノロジです。 Web APIを使用すると、すべてのブラウザとネイティブデバイスが理解できるHTTPプロトコルに基づいた堅牢なサービスを簡単に作成できます。これにより、アプリケーションをサポートし、他のWebアプリケーション、タブレット、携帯電話、PC、およびゲーム機からそれらを呼び出すサービスを作成できます。現在のWeb接続を利用するために今日作成されているアプリケーションの大多数は、何らかの方法でHTTPサービスを使用しています。

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

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

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

WCFの例:

例を考えてみましょう。

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

This is how WCF serves different clients

結論:

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

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

ii)WCFを選択する時期

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

警告される:

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

10
Wiqi

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

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

9
magallanes

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

JSON LD(Json Linked Documents)は、JSONスキーマをより優れたセマンティクスで公開することによって、JSONベースのREST開発者エクスペリエンスをさらに向上させる新しい標準です。

7

Wcfを使えば、tcpのような複数のエンドポイントに対して同じサービスサポートを設定して公開することができます。 Web APIは、wcfに比べて構成が非常に少なく、wcfよりも少し高速です。 Wcfはまた休憩サービスをサポートしています。 .NET Framework 3.5に制限がある場合は、wcfを選択してください。

1